# DOS/Version imprimable

* Si vous imprimez cette page, choisissez « Aperçu avant impression » dans votre navigateur, ou cliquez sur le lien Version imprimable dans la boîte à outils, vous verrez cette page sans ce message, ni éléments de navigation sur la gauche ou en haut.
* Cliquez sur Rafraîchir cette page pour obtenir la dernière version du wikilivre.
* Pour plus d'informations sur les version imprimables, y compris la manière d'obtenir une version PDF, vous pouvez lire l'article Versions imprimables.
Une version à jour et éditable de ce livre est disponible sur Wikilivres, une bibliothèque de livres pédagogiques, à l'URL : https://fr.wikibooks.org/wiki/DOS

# Introduction

Le DOS (Disk Operating System) est un système d'exploitation mono-tâche datant des débuts des ordinateurs personnels. Le plus connu est MS-DOS, de la société Microsoft, qui a été choisi par IBM pour équiper ses tout premiers PC (Personal Computer), et a ensuite été présent sur la plupart des « compatibles » ; il n'est maintenant plus maintenu. Un concurrent a été DR-DOS, racheté et renommé plusieurs fois et finalement abandonné. Actuellement il existe FreeDOS, un DOS gratuit et open-source.
Les différentes versions de Windows NT (2000, NT4, XP et Vista) offrent une interface en ligne de commande, qu'on appelle parfois « fenêtre DOS ». La présentation et certaines commandes sont semblables au MS-DOS. De même, les systèmes Windows reposant (en partie) sur une couche MS-DOS (Windows 3.x, 95, 98, et ME) permettaient également un accès au DOS à l'intérieur d'une fenêtre.
Les commandes permettent la manipulation de fichiers et de répertoires, l'exécution d'applications, et l'exécution de scripts de traitement par lots (fichiers batch).

## Syntaxe des commandes

La syntaxe d'une commande est la suivante :
* nom de la commande : commande interne ou chemin de l'application (fichier exécutable ou script) à lancer,
* arguments de cette commande.
Le séparateur utilisé est le caractère espace.

## Chemin des fichiers

Beaucoup de commandes utilisent des chemins pour désigner les fichiers traités. Un chemin est une suite de caractères désignant le chemin de la façon suivante :
* soit le chemin donné est absolu, il désigne alors un fichier précis quel que soit le contexte,
* soit le chemin donné est relatif au chemin contextuel courant (répertoire de travail), le fichier désigné dépend donc du contexte.
Contrairement au monde Unix, le caractère séparant les différentes parties est le backslash (\).

### Fichiers et répertoires

Un fichier contient des données. Un répertoire contient des fichiers et d'autres répertoires.

### La syntaxe générale

Un chemin est composé des éléments suivants (chacun étant optionnel sauf indication contraire) :
* une lettre de lecteur suivie du caractère deux-points, sinon le lecteur utilisé est le lecteur contextuel courant,
* le caractère anti-slash pour partir de la racine du lecteur, si ce caractère est présent, le chemin est absolu, sinon il est relatif au répertoire courant (du lecteur désigné ou courant),
* la suite de répertoires où se trouve le fichier, chaque répertoire étant suivi du caractère anti-slash,
* (obligatoire) le nom du fichier ou répertoire désigné.
Le DOS ne distingue pas les minuscules des majuscules. C'est à dire que les chemins suivants désignent le même fichier :

### Les lettres de lecteur

Les lettres de lecteur sont toujours suivies du caractère deux-points et désignent un support particulier. Ce support peut être :
* un lecteur de disquette,
* un disque dur,
* une partition du disque dur,
* un disque virtuel en RAM,
* un lecteur réseau,
* un pseudo-lecteur pointant un répertoire.
Le lecteur contextuel courant est modifié en tapant la lettre de lecteur suivie du caractère deux-points. L'invite de commande par défaut indique le lecteur courant et le répertoire de travail courant sur ce lecteur.
Exemples :
En règle générale, les lecteurs sont assignés de la manière suivante :
* le lecteur A: désigne le premier lecteur de disquettes,
* le lecteur B: désigne le deuxième lecteur de disquettes,
* le lecteur C: désigne la première partition du disque dur,
* les lecteurs suivants (D:, E: ...) désignent les partitions suivantes,
* les lecteurs suivants désignent les lecteurs/graveurs de CD ou DVD,
* les lecteurs suivants désignent les supports amovibles (Clé USB, ...).

### Répertoires spéciaux

Deux répertoires spéciaux sont définis dans chaque répertoire du système de fichiers :
* le répertoire courant nommé . désigne le répertoire lui-même,
* le répertoire parent nommé .. désigne le répertoire contenant celui-ci.
C'est à dire que les chemins suivants désignent le même répertoire :

### Le répertoire contextuel courant

L'environnement de l'interpréteur de commandes garde en mémoire le répertoire de travail pour chaque lecteur. Ce répertoire est modifié par la commande Chdir (ou Cd). Certaines versions fournissent également les commandes Pushd et Popd.
Exemples :
Ce répertoire de travail permet de désigner de façon plus concise les fichiers et sous-répertoires qu'il contient. Il permet de déterminer le chemin absolu d'un fichier à partir d'un chemin relatif.

## Redirection

Il est possible de rediriger l'entrée et les sorties standards de la commande depuis/vers un fichier texte, en utilisant les caractères suivants :
* < pour lire les données depuis un fichier au lieu du clavier,
* > pour enregistrer la sortie de la commande dans un nouveau fichier au lieu de l'afficher à l'écran,
* >> pour enregistrer la sortie de la commande à la fin d'un fichier existant au lieu de l'afficher à l'écran.
Exemples :
Il est possible de faire précéder le signe > par le numéro du flux standard redirigé :
* 1 désigne la sortie standard (stdout),
* 2 désigne la sortie d'erreur (stderr).
Par défaut il s'agit du flux 1 (sortie standard).
Exemple :
Il est également possible de rediriger un flux vers l'autre, afin par exemple de les rediriger tous les deux vers le même fichier. Dans ce cas, l'un des deux est redirigé vers l'autre en le nommant après le caractère & :
Enfin, il est possible de rediriger une commande vers NUL au lieu d'un fichier pour simplement masquer l'affichage de la commande :

## Enchaîner les commandes

Les commandes sont en général séparées par un retour à la ligne. Elles sont exécutées l'une après l'autre, quel que soit les erreurs qui peuvent se produire. On peut également les placer sur la même ligne en les séparant par les caractères suivants :
* & pour enchaîner les commandes comme avec le retour à la ligne. Exemple :
* && pour enchaîner les commandes seulement si la commande qui précède ne retourne pas d'erreur. Exemple :
* || pour enchaîner les commandes seulement si la commande qui précède retourne une erreur. Exemple :

## Grouper les commandes

Les parenthèses permettent de grouper les commandes, afin par exemple de rediriger leurs sorties de la même manière. Exemple :

## Caractères spéciaux

Certains caractères spéciaux sont interprétés :
* Le caractère espace sépare les arguments,
* Les caractères <, >, >>, | servent à rediriger les flux standards de la commande,
* Les caractères &, && et || servent à l'enchaînement des commandes
* Le retour à la ligne sépare les commandes.
Certains cas nécessitent leur utilisation sans interprétation (messages, ...). Pour éviter l'interprétation d'un caractère, il faut le faire précéder du caractère accent circonflexe :
Cependant, ceci ne fonctionne pas avec le caractère espace (dans un nom de fichier par exemple). Dans ce cas, il faut utiliser les guillemets :

## Masquage du retour de commande

Dans un script, pour ne pas afficher une commande, tout en conservant le retour, il suffit d'ajouter le caractère @. Pour l'appliquer sur tout le script, il suffit d'utiliser la commande Echo à laquelle il est possible d'ajouter le @ pour ne pas voir la première commande ECHO.
Le @ masque la commande ECHO OFF, et la commande masque toutes les suivantes.

## Noms de fichier spéciaux

Certains noms de fichier sont réservés aux périphériques systèmes :

### NUL

    Périphérique nul : toute écriture est absorbée, et la lecture ne retourne rien (vide) ;

### CON

    Console : clavier et écran ;

### CONIN$

    Console input : clavier ;

### CONOUT$

    Console output : écran ;

### LPT1

    Port parallèle 1 ;

### LPT2

    Port parallèle 2 ;

### COM1

    Port série 1 ;

### COM2

    Port série 2 ;

### AUX

    Périphérique auxiliaire (en général équivalent à COM1) ;

### PRN

    Imprimante (en général équivalent à LPT1).

## Obtenir de l'aide

La plupart des commandes acceptent le paramètre /? pour afficher l'aide sur la commande (rappel de syntaxe, paramètres et options).
Exemple :
Il est également possible d'utiliser la commande help suivie du nom de la commande à documenter.
Exemple :

## Boucle

Afficher une séquence :
Déplacer des fichiers selon leurs noms :

## Liste alphabétique des commandes

| Lettre | Commandes |
| A | Append • Arp • Assoc • At • Atmadm • Attrib |
| B | Bcdedit • Bootcfg • Break |
| C | Cacl • Cacls • Call • Cd • Chcp • Chdir • Chkdsk • Chkntfs • Choice • Cipher • Cls • Cmd • Cmstp • Color • Command • Comp • Compact • Convert • Copy • Cscript |
| D | Date • Debug • Defrag • Del • Deltree • Dir • Diskcomp • Diskcopy • Diskpart • Diskperf • Dnscmd • Doskey |
| E | Echo • Edit • Edlin • Endlocal • Erase • Eventcreate • Eventtriggers • Exe2bin • Exit • Expand |
| F | Fc • Fdisk • Find • Findstr • Finger • Fixboot • Fixmbr • For • Format • Fsutil • Ftp • Ftype |
| G | Getmac • Goto • Graftabl |
| H | Help • Hostname |
| I | Icacls • If • Ipconfig • Ipv6 |
| J | Jview |
| K | Keyb • Kill |
| L | Label • Lpq • Lpr |
| M | Makecab • Md • Mem • Mkdir • Mklink • Mode • More • Mountvol • Move • Msiexec |
| N | Nbtstat • Net • ( Net send • Net start • Net stop • Net statistics • Net use) • Netsh • Netstat • Nlsfunc • Nslookup • Ntbackup |
| P | Path • Pathping • Pause • Pentnt • Ping • Popd • Powershell • Print • Prompt • Pushd |
| R | Rcp • Rd • Recover • Reg • Regsvr32 • Rem • Ren • Rename • Replace • Rexec • Rmdir • Robocopy • Route • Rsh • Rsm • Runas |
| S | Sc • Scandisk • Schtasks • Set • Setlocal • Setver • Setx • Sfc • Shift • Shutdown • Sort • Start • Subst • Sys • Systeminfo |
| T | Taskkill • Tasklist • Tcmsetup • Telnet • Tftp • Time • Timeout • Title • Tlist • Tracert • Tree • Type • Typeperf |
| V | Ver • Verify • Vol • Vssadmin |
| W | W32tm • Where • Whoami • Wmic |
| X | Xcopy |

# At

Commande qui sert à faire des tâches planifiées sous Windows en ligne de commande.

# Attrib
## Description

Affiche ou change les attributs de fichiers ou dossiers.

## Syntaxe
### Attributs

    Ajoute un attribut (ex.: +H).
    Retire un attribut (ex.: -H).

#### R

    Fichiers en lecture seule.

#### A

    Fichiers archives.

#### S

    Fichiers système.

#### H

    Fichiers cachés.

#### I

    Fichiers indexés sans contenu.

## Chemin
### [lecteur:][chemin][nom_de_fichier]

    Spécifie un ou plusieurs fichiers à traiter par ATTRIB.

### Options
#### /S

    Traite les fichiers correspondants dans le dossier actif et tous ses sous-dossiers.

#### /D

    Traite également les dossiers.

#### /L

    Effectue l'opération sur les attributs du lien symbolique plutôt que sa cible.

## Exemple

Pour masquer un fichier :

# Break

Interromp l'execution d'un batch.

# Call
## Introduction

Commande interne DOS, elle est utilisée dans un batch pour appeler un autre fichier batch, ou une sous-routine située à un label particulier du fichier. Après la commande, l'exécution se poursuit à l'instruction suivante.

## Utilisation

Pour appeler un autre fichier batch :
Pour appeler une sous-routine située à un label particulier du fichier batch :

### Exemple 2 : appeler une sous-routine du fichier batch

Pour sortir du batch ou terminer la sous-routine, le label spécial :eof est utilisé.

# Cd
## Introduction

Change Directory
Cette commande permet de changer de répertoire. C'est en fait un raccourci pour Chdir.

## Utilisation

Affiche simplement le répertoire courant
Va dans le repertoire indiqué
Remonte dans le répertoire parent
Ne fait rien, en effet . représente le répertoire courant.
Remonte à la racine lecteur du répertoire
Si le répertoire courant est C:\WinNT
Le répertoire courant affiché est toujours C:\WinNT, mais en changeant le lecteur :
Le répertoire courant affiché est bien E:\temp. En fait le système mémorise le répertoire courant pour chaque lecteur.
Il existe une option pour effectuer les deux commandes en une seule :

# Cd
## Introduction

Change Directory
Cette commande permet de changer de répertoire. C'est en fait un raccourci pour Chdir.

## Utilisation

Affiche simplement le répertoire courant
Va dans le repertoire indiqué
Remonte dans le répertoire parent
Ne fait rien, en effet . représente le répertoire courant.
Remonte à la racine lecteur du répertoire
Si le répertoire courant est C:\WinNT
Le répertoire courant affiché est toujours C:\WinNT, mais en changeant le lecteur :
Le répertoire courant affiché est bien E:\temp. En fait le système mémorise le répertoire courant pour chaque lecteur.
Il existe une option pour effectuer les deux commandes en une seule :

# Cls
## Introduction

Clear Screen
Cette commande interne du DOS permet d'effacer l'écran (ou la fenêtre) de l'interpreteur de commande.

## Utilisation

Exemple:
Note: Aucune option n'est rattachée a cette commande.

# Cmd

Appel de la Console DOS sous Windows.
Chemin d'accès : Démarrer -> Exécuter -> Taper "CMD" puis ENTREE ↵

# Color
## Introduction

Cette commande permet de changer la couleur d'arrière-plan ainsi que celle des caractères.

## Utilisation

Il faut entrer color suivi des chiffres suivants :
Le premier chiffre sera la couleur de l'arrière-plan, le second sera la couleur des caractères.
Dans cet exemple, l'arrière-plan sera marron et les caractères seront en cyan.

# Convert
## Introduction

Commande interne DOS, elle permet de convertir les volumes FAT en NTFS.

## Utilisation

CONVERT [volume:] [format]
Exemple:
* Le volume doit être défini par sa lettre et les deux points
* Le format est défini par /FS:NTFS (le seul disponible).
Options
* /V Permettant d'avoir plus d'information sur le déroulement de l'exécution
Notes: Si le disque dur à convertir est utilisé, l'application demandera pour se lancer au prochain démarrage.

# Copy
## Introduction

Copy
Cette commande copie un ou plusieurs fichiers sur un autre emplacement.

## Paramètres
### source

    Fichier(s) à copier.

### /A

    Indique un fichier texte ASCII.

### /B

    Indique un fichier binaire.

### cible

    Répertoire et/ou nom de fichier cible.

### /V

    Vérifie l'écriture du ou des fichiers cible.

### /N

    Utilise un nom de fichier court, s'il est disponible, lors de la copie d'un fichier ayant un nom supérieur à 8.3 caractères.

### /Y

    Supprime la confirmation de l'écrasement d'un fichier cible existant.

### /-Y

    Demande une confirmation pour écraser un fichier cible existant.

### /Z

    Copie les fichiers réseau en mode redémarrage.
L'option /Y peut être prédéfinie dans la variable d'environnement COPYCMD. Il est possible d'annuler cela avec l'option /-Y de la ligne de commande. Par l'utilisateur est invité à confirmer l'écrasement à moins que la COPY ne soit exécutée à partir d'un fichier de commandes.
Pour concaténer des fichiers, spécifier un seul fichier cible et plusieurs sources (avec caractères génériques ou fichier1+fichier2+fichier3) ou un répertoire :

# Date
## Introduction

La commande DATE permet de modifier la date système, ou simplement de la lire.

## Utilisation

Si aucun paramètre n'est spécifié, la commande demande à l'utilisateur la nouvelle date.
Le commutateur /T permet d'afficher la date courante sans rien demander (aucune attente).
Si une date est spécifiée en paramètre, la date système est modifiée.

### Résultat
## Exemple
### Lecture

Le script suivant récupère le retour de DATE /T grâce à la commande For et découpe la ligne suivant les caractères / et espace pour ne récupérer que certaines informations.
L'exemple ci-dessus ne fonctionne pas sur le DOS Microsoft Windows [version 6.1.7601] car "DATE /T" n'y affiche pas le jour de la semaine.
Notons qu'il est également possible de passer par la variable d'environnement %DATE% de la manière suivante :
* Affichage au format yyyymmdd :
Résultat : 20120706.

### Écriture
## Voir aussi

* La commande Time.

# Del
## Introduction

Delete
Erase
Commande interne DOS, elle permet de supprimer des fichiers.

## Utilisation

* La liste noms peut employer les caractères génériques * et ?.

### Options
#### /P

    Demande une confirmation avant de supprimer un fichier.

#### /F

    Force la suppression de fichiers en lecture seule.

#### /S

    Supprime les fichiers dans tous les sous-répertoires.

#### /Q

    Pas de confirmation avant la suppression si des caractères génériques ont été utilisés (* et ?).

#### /A

    Suppression en fonction des attributs :

   #### R

       Fichiers en lecture seule

   #### S

       Fichiers système

   #### H

       Fichiers cachés

   #### A

       Fichiers prêts pour archive
       Préfixe de négation

### Exemples

Pour supprimer tous les fichiers temporaires de plus de 60 jours (sous les anciennes versions de DOS) :
Sous Windows, le répertoire C:\Temp n'est plus utilisé. Chaque utilisateur a son répertoire temporaire dont le chemin est donnée par la variable d'environnement TEMP :

# Deltree

Type: External (6.0 et versions ultérieures)
Syntaxe:
DELTREE [/ Y] [d:] chemin [d:] chemin [...]
Objet: Supprime (efface) un répertoire contenant tous les fichiers et sous-répertoires qu'il contient (nouveau avec DOS version 6).
Discussion
Contrairement à la commande RMDIR, la commande DELTREE vous permet de supprimer un répertoire même s'il contient des fichiers et des sous-répertoires. Tous les fichiers et sous-répertoires subordonnés au répertoire que vous supprimez seront également supprimés, quels que soient leurs attributs. Cela signifie que même si un fichier a des attributs cachés, système, en lecture seule ou autres, il sera quand même supprimé. Vous pouvez spécifier plusieurs répertoires à supprimer.
Lorsque vous utilisez des caractères génériques avec la commande DELTREE, vous devez être extrêmement prudent, car les répertoires et les fichiers dont le nom correspond au caractère générique seront supprimés. Utilisez auparavant la commande DIR pour lister et vérifier les répertoires et fichiers qui seront supprimés.
Option
/ Y - Exécute la commande DELTREE sans fournir d'invite pour confirmer la suppression.
Exemples
Pour supprimer le répertoire "letters" situé à la racine du lecteur C:, y compris tous les fichiers et sous-répertoires qu'il contient, entrez
DELTREE c:\letters

# Dir
## Introduction

Le DOS est le sigle des mots Disk Operating System (système de gestion des disques), c'est un langage de programmation inventé par Microsoft.
Le DOS n'est pas accessible directement à l'utilisateur, c'est un ensemble de routines matérielles et logicielles gérant les différents éléments de l'ordinateur. Ces routines sont regroupées en catégories nommées interruptions.
Windows est lui-même programmé en partie en DOS.
Directory listing
Commande interne de toutes les versions de DOS, permettant de lister les descripteurs, répertoires, (directory) des mémoires de masse attachées au système d'exploitation DOS.

## Utilisation

DIR [lecteur:][chem][fichier]
* DIR : Affiche la liste des répertoires et fichiers du dossier (répertoire) actuel.
* DIR *.ext : Affiche la liste de tous les fichiers ayant l'extension EXT.
* DIR X*.* : Affiche la liste des fichiers commençant par X.

### Commutateurs ou options

/P, /W, /A, /O, /S, /B, /L, /C[H]
* /P : Marque une pause à chaque écran lors de l'affichage de la liste des fichiers et dossiers.
* /W : Affiche de manière condensée la liste des fichiers et répertoires sur plusieurs colonnes.
* /A[:]attributs : Affiche les fichiers titulaires des attributs spécifiés.
** D Répertoires
** R Fichiers lecture seule
** H Fichiers cachés
** S Fichiers système
** A Fichiers prêt à archiver
** - Préfixe signifiant "non"
* /O : Affiche les fichiers dans l'ordre spécifié.
** N Nom (alphabétique)
** S Taille (croissante)
** E Extension (alphabétique)
** D Date et heure (chronologique)
** G Répertoires en tête
** - Préfixe pour l'ordre inverse
** C Par taux de compression (par ordre croissant)
* /S : Affiche le catalogue du répertoire courant et de tous les sous-répertoires de celui-ci.
* /B Affiche les noms de fichier seuls.
* /L Affiche le catalogue en minuscules.
* /C[H] : Affiche le taux de compression du fichier;
** /CH Utilise pour l'affichage la taille l'unité d'allocation de l'hôte.
Note : Les différentes options peuvent être combinées.
Les commutateurs ou options peuvent être initialisés dans la variable d'environnement DIRCMD. Fixez les options en préfixant le commutateur par -, ex: /-W.

### Lister le contenu d'un répertoire dans un fichier

Il peut être pratique de lister les fichiers d'un répertoire (par exemple, pour tenir un catalogue de fichiers).
La fonction dir permet de lister le contenu d'un répertoire et de le sauvegarder dans un fichier. Il suffit d'utiliser la redirection > :
Pour lister plusieurs répertoires, il suffit de lancer tout d'abord la commande ci-dessus une première fois. Ensuite, en appliquant la redirection >> aux répertoires suivant, les nouvelles listes sont concaténées dans le fichier :

# Diskpart
## Introduction

Commande de gestion des partition.
Cette commande permet de contourner les bridages de la gestion des disques Windows 7.

## Exemple

Pour supprimer le montage du lecteur S (sans effacer la partition) :

# Echo
## Introduction

Commande interne DOS, elle permet d'afficher des messages et de basculer le mode echo.

## Utilisation
### Mode echo

Quand le mode echo est actif, le prompt est affiché avant la commande, et en mode batch, toutes les commandes exécutées sont affichées. Quand il est inactif, le prompt n'est pas affiche, et en mode batch, les commandes exécutées ne sont pas affichées au préalable.
Si aucun paramètre n'est fourni, la commande affiche l'état actuel

### Message

Le fait que cette commande ait une double utilisation interdit apparemment les messages vides ou ne comportant que le mot ON ou OFF. Mais ceci est contourné en utilisant le caractère point (.) au lieu de espace pour le séparer du message :
Comme pour toute commande DOS, il est également possible d'afficher les caractères normalement interprétés par le DOS, en les précédant du caractère accent circonflexe (^) :
affiche :
Il est également possible de mettre des chaines de caractère entre guillemets ("). Les guillemets seront affichés mais les commandes DOS ne seront pas interprétées :
affiche

### Exemples

La commande affiche :

# Edit
## Introduction

La commande EDIT est en réalité un programme DOS qui permet d'éditer des fichiers textes sous une console DOS. Sous windows, l'encodage de l'affichage n'est pas de l'ASCII, mais un autre codage (Latin-1 ou ISO8859-1 pour la France) dont la moitié des caractères sont en commun. Dans une console DOS, le codage utilisé est de l'ASCII étendu. Ainsi, le caractère 'é' entré dans un éditeur windows (quel qu'il soit) est codé différemment et apparait en 'Ú' dans la console. La commande EDIT permet d'écrire dans les fichier en utilisant l'encodage ASCII étendu qui sera utilisé lors de l'exécution du script. C'est pourquoi, il est recommendé d'écrire un script sous windows, puis de l'éditer sous EDIT. En effet, tous les caractère du type 'é' apparaitront sous EDIT en 'Ú'. Il est alors facile de repérer ces caractères et de les modifier en caractères corrects.

## Utilisation

Ouvre l'éditeur de fichier DOS avec ou sans un fichier.
Sous Windows 10, 'edit' n’est pas reconnu en tant que commande interne. Ils recommandent "notepad" à la place.

## Exemple
# Del
## Introduction

Delete
Erase
Commande interne DOS, elle permet de supprimer des fichiers.

## Utilisation

* La liste noms peut employer les caractères génériques * et ?.

### Options
#### /P

    Demande une confirmation avant de supprimer un fichier.

#### /F

    Force la suppression de fichiers en lecture seule.

#### /S

    Supprime les fichiers dans tous les sous-répertoires.

#### /Q

    Pas de confirmation avant la suppression si des caractères génériques ont été utilisés (* et ?).

#### /A

    Suppression en fonction des attributs :

   #### R

       Fichiers en lecture seule

   #### S

       Fichiers système

   #### H

       Fichiers cachés

   #### A

       Fichiers prêts pour archive
       Préfixe de négation

### Exemples

Pour supprimer tous les fichiers temporaires de plus de 60 jours (sous les anciennes versions de DOS) :
Sous Windows, le répertoire C:\Temp n'est plus utilisé. Chaque utilisateur a son répertoire temporaire dont le chemin est donnée par la variable d'environnement TEMP :

# Exe2bin
## Introduction

Executable to Binary
Cet utilitaire permet de convertir des fichiers exécutables au format binaire.

## Syntaxe
### fichier1.exe

    Nom du fichier exécutable à convertir.

### fichier2.bin

    Nom du fichier binaire à créer. S'il n'est pas spécifié, le fichier sera nommé selon le fichier à convertir.

## Exemple

Dans le second exemple, le fichier exe1mple.exe sera converti en exe1mple.bin.

# Exit
## Introduction

Commande interne DOS, elle permet de sortir de l'interpréteur.

## Utilisation
### Options
#### /B

    Sort du fichier batch sans terminer cmd.exe.

#### code_sortie

    Code de sortie retourné (errorlevel).

### Exemple
# Expand
## Paramètres

La commande expand prend différents paramètres :
| Paramètre | Description |
| -r | Renomme des fichiers développés. |
| <destination> | Spécifie l’emplacement où les fichiers sont développés. Si source correspond à plusieurs fichiers et si -r n’est pas spécifié, destination doit correspondre à un répertoire. destination peut avoir pour valeur une lettre de lecteur suivie du signe deux-points, un nom de répertoire, un nom de fichier ou une combinaison d’un ou de plusieurs de ces éléments. |
| -d | Affiche la liste des fichiers à l’emplacement source. Ne développe ou n’extrait pas les fichiers. |

# Find
## Introduction

La commande FIND permet de rechercher une chaîne de texte dans un ou plusieurs fichiers.

## Syntaxe
### Chemin
#### "chaîne"

    Spécifie la chaîne de texte à rechercher.

#### [lecteur:][chemin]nom_de_fichier.ext

    Spécifie un ou plusieurs fichiers pour la recherche (facultatif).
Sans chemin spécifié, FIND recherche la chaîne de texte saisie à l'invite ou redirigée depuis une autre commande.

### Options
#### /V

    Affiche toutes les lignes ne contenant pas la chaîne spécifiée.

#### /C

    Affiche seulement le nombre de lignes contenant la chaîne.

#### /N

    Affiche les numéros de ligne avec les lignes affichées.

#### /I

    Ignore la casse lors de la recherche de la chaîne.

#### /OFF[LINE]

    Ne pas ignorer les fichiers dont l'attribut "hors connexion" a été réglé.

## Exemple
# Findstr

Recherche de chaînes de caractères dans les fichiers.
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
Utilisez des espaces pour séparer plusieurs chaînes à rechercher, sauf si l'argument est précédé de /C. Exemple : 'FINDSTR "bonne journée" x.y' recherche "bonne" ou "journée" dans le fichier x.y. 'FINDSTR /C:"bonne journée" x.y' recherche "bonne journée" dans le fichier x.y.
Petit guide des options usuelles :
Pour obtenir des informations complètes sur les options usuelles FINDSTR, reportez-vous à la Référence des commandes en ligne.

# For
## Introduction

Cette commande permet de faire une boucle. Celle-ci peut répéter une liste de valeurs, les lignes d'un ou plusieurs fichiers, ou encore un ensemble de nombres entiers. Le type de boucle est choisi par le commutateur indiqué au FOR (aucun, /D, /R, /L ou /F).
La commande FOR utilise une ou plusieurs variables locales pour effectuer la boucle. Dans le cas d'une commande entrée directement sous DOS, il faut les utiliser avec un simple %, alors que si la commande est utilisée dans un fichier batch .bat, il faudra l'utiliser avec %%. Dans la suite, les descriptions d'utilisation utiliseront un simple %, et les exemples, généralement destinés à être intégrés dans un fichier de commandes, auront les variables notées avec %%

## Boucle sur des fichiers

Ces boucles s'utilisent pour appliquer une commande à plusieurs fichiers. Au lieu de copier plusieurs fois la même commande pour un fichier, le FOR permet de n'écrire cette commande qu'une seule fois. Ceci est surtout utile si la commande est complexe.

### Utilisation

Pour ce cas, le FOR s'utilise sans commutateur. Il est généralement utilisé pour boucler sur un ensemble de noms de fichier, d'autant qu'il est utilisé avec les expressions du type *.extension ou utilisant les caractères génériques '*' et '?' autrement. Il peut être utilisé avec de simples chaînes de caractères, mais ceci est déconseillé à cause de l'interprétation de certains caractères.

### Exemples
#### Exemple sur de simples chaînes

Cet exemple est équivalent à l’exécution des commandes suivantes :

#### Exemple sur un ensemble de fichiers sans caractère générique

Cet exemple est équivalent à l’exécution des commandes suivantes :

#### Exemple sur un ensemble de fichiers utilisant les caractères génériques

En supposant que le répertoire courant contienne les fichiers fich1.txt, fich2.txt et fich3.txt, cet exemple est équivalent à l’exécution des commandes suivantes :
Variante :
En supposant que le répertoire courant contienne les fichiers fich1.txt, fich2.txt, fich3.txt, readme.doc, lisezmoi.doc, cet exemple est équivalent à l’exécution des commandes suivantes :

## Boucle de répétition de commandes

Ces boucles s'utilisent pour exécuter une commande plusieurs fois, au lieu de faire beaucoup de copies de la commande, la boucle FOR permet de n'écrire cette commande qu'une fois. ceci est surtout utile si le nombre de répétition est grand.

### Utilisation

Le commutateur /L permet de faire une boucle FOR classique, c'est-à-dire qu'elle permet de boucler sur des commandes un certain nombre de fois.
La première boucle mettra dans variable la valeur index de début, puis, à chaque boucle, la valeur affectée à variable sera incrémentée de la valeur pas. Enfin, lorsque la valeur affectée à variable dépasse la valeur index de fin, la boucle s'arrête.

### Exemple

Ici, la variable %i commence à 1, augmentera de 2 à chaque boucle. La boucle se terminera lorsque %i vaudra plus de 10 (c'est-à-dire que %i = 9 sera la dernière boucle). Cet exemple est donc équivalent à l’exécution des commandes suivantes :

## Boucle sur des répertoires

Le principe est le même que pour les boucles sur des fichiers, mais s'applique sur les répertoires lorsque l'ensemble est une chaine contenant des caractères génériques.

### Utilisation

Le commutateur /D permet de rechercher des répertoires au lieu de fichiers.

### Exemples
#### Exemple sur un ensemble de répertoires sans interprétation

Cet exemple est équivalent à l'exécution des commandes suivantes :
Cet exemple est aussi équivalent à l'exécution des commandes suivantes :
En effet, ici, aucune interprétation d'expression n'est effectuée, c'est comme si la boucle s'effectuait sur des fichiers ou des chaînes de caractères.

#### Exemple sur un ensemble de répertoires utilisant des caractères génériques

Si le répertoire courant contient les répertoires Documents and Settings et Docs, cet exemple est équivalent à l'exécution des commandes suivantes :

## Boucle récursive sur des fichiers ou des répertoires

Le principe est le même que les boucles sur des répertoires ou fichiers, mais les recherches se poursuivent dans les sous-répertoires lorsque l'ensemble contient des caractères génériques.

### Utilisation

L'ajout du commutateur /R permet de faire cette boucle récursive sur les sous-répertoires.
Si le commutateur /R est le seul présent, la recherche récursive s'effectuera sur des noms de fichiers.
Si les commutateur /R et /D sont présents, la recherche récursive s'effectuera sur des noms de répertoires.

### Exemples
#### Exemple sur un ensemble de répertoires sans caractère générique

Comme dans le paragraphe précédent, sans caractère générique le commutateur /R est inutile.

#### Exemple sur un ensemble de répertoires utilisant des caractères génériques

Si le répertoire courant contient les répertoires Documents and Settings et Docs, ainsi que temp contenant le sous-répertoire Documentation, alors cet exemple est équivalent à l'exécution des commandes suivantes :

#### Exemple sur un ensemble de fichiers utilisant des caractères génériques

équivalent possible à l'exécution des commandes suivantes :

## Boucle sur le contenu d'un fichier

Ces boucles s'utilisent pour appliquer une commande à plusieurs lignes d'un fichier. Contrairement aux autres boucles FOR qui se contentent de noms de fichiers, ces boucles ouvrent tous les fichiers indiqués, et les lisent ligne par ligne. À chaque itération de boucle correspond une ligne d'un fichier.

### Utilisation

Le commutateur /F permet d'effectuer une boucle sur le contenu de fichiers.
Avec ce commutateur on peut mettre des options qui vont indiquer comment découper le ou les fichiers, pour savoir quelles parties seront retenues pour l'exécution de la commande. Cela permet, par exemple, le découpage mot par mot.
Il faut bien garder à l'esprit que toutes les options définies ci-après se feront sur une ligne donnée d'un fichier, et sont cumulatives.

#### Découpage de mots ou blocs

Pour un découpage poussé, il faut indiquer le ou les caractères qui délimitent les zones. Par exemple, pour les mots, ce seront les caractères espace, mais on peut également découper selon plusieurs caractères différents.
Pour les mots séparés par des espaces, il suffira d'ajouter l'option :
Par défaut, les caractères espace et tabulation servent de séparateur.

#### Exclusion de fin de ligne

Pour découper et ne pas prendre en compte tout ce qui se situe à droite d'un caractère, il existe l'option suivante (end of line) :
Par exemple, si le caractère # est un caractère de début de commentaire, et si l'on ne veut pas lire les commentaires, il suffit d'ajouter l'option :

#### Exclusion des premières lignes

Certains fichiers peuvent contenir des entêtes inexploitables. Il est possible de les supprimer en indiquant le nombre de lignes à exclure lors de la lecture ligne par ligne du fichier. Cette option est globale au fichier, ce n'est pas un traitement de ligne.
Par exemple, pour exclure systématiquement les quatre premières lignes des fichiers, il suffit d'ajouter :

#### Découpe dans les variables

La commande FOR ne prend qu'un seul nom de variable. Or, pour chaque ligne, il est possible de faire un découpage, mais un système est mis en place pour permettre de remplir plusieurs variables. Pour l'utiliser, il faut remplir l'option suivante :
Par exemple, pour un découpage par mots, pour traiter, le premier et le deuxième mots, il faudra utiliser l'option :
Pour récupérer le reste de la ligne (sans séparer les mots), il suffit d'ajouter le caractère * :
Dans la commande, pour utiliser ces différentes zones, il faut utiliser le nom de la variable avec un seul caractère, et de nouvelles variables seront automatiquement créées avec les zones suivantes en incrémentant alphabétiquement le nom de la précédente. Par exemple, si la commande FOR est déclarée avec la variable %%i, la première zone sera mémorisée dans %%i, la deuxième dans %%j, la troisième dans %%k (et ainsi de suite si d'autres zones sont définies). Utiliser la commande FOR en passant le nom de variable %%a permet d'avoir une marge généralement suffisante (26 caractères).

### Exemple 1

Soit un fichier monFich.txt contient les deux lignes suivantes :
Un commande FOR lisant ce fichier pourrait être :
Dans cet exemple, le fichier monFich.txt va être lu ligne par ligne, aucune ligne de début n'est exclue. Les lignes contenant un caractère ; ne seront lues que partiellement : du début jusqu'à ce caractère exclu. Chaque ligne sera découpée en zones selon les caractères virgule (,) et espace. La zone 2 sera mémorisée dans %%a, la zone 3 dans %%b, et toutes les zones suivantes dans %%c L'exécution de cette commande est donc équivalente à :

### Exemple 2

Cet exemple énumère les noms de variables d'environnement de l'environnement en cours.

## Boucle sur le retour d'une commande

On pourrait lire de la même façon les lignes de retour d'une commande en redirigeant la sortie d'affichage sur un fichier via l'opérateur commande > fichier , mais la commande FOR permet de lire directement le retour d'une commande sans passer par un fichier. Le principe est le même que les boucles sur les contenus de fichiers, y compris pour les options, seul l'ensemble donné change.

### Utilisation

À la place de l'ensemble de fichiers, il suffit de mettre une commande entre quotes inversées. Les opérations s'effectueront alors sur les lignes du retour d'affichage (qui n'est donc plus affiché).

### Exemple

L'exemple suivant permet de rechercher tous les fichiers .txt et compte le nombre de fichiers trouvés. Pour cela, la commande DIR /B *.txt liste tous les fichiers .txt sans information supplémentaire. Ainsi, il suffit de compter le nombre de lignes normalement affichées en utilisant un simple compteur.

## Boucle avec plusieurs commandes

Dans tous les exemples précédents, une seule commande était exécutée, mais la commande FOR offre la possibilité d'exécuter, pour chaque itération, une succession d'instructions écrite sur plusieurs lignes via des parenthèses. Ceci fonctionne pour tous les cas précédemment définis.

### Utilisation

La parenthèse ouvrante doit se situer sur la même ligne que le FOR pour être valide.

### Exemple

L'exemple suivant permet de rechercher tous les fichiers .txt contenant la chaîne de caractères toto. La commande FIND /C "toto" *.txt est utilisée pour faire la recherche. Cette commande retourne :
Même si la chaîne de caractères n'est pas trouvée, FIND retourne une ligne avec 0 pour le nombre d’occurrences (voir DOS/Find). L'exemple suivant traite donc, chaque ligne retournée par le FIND afin de récupérer le nom des fichiers trouvés.
Le nombre d’occurrences est mis dans %%C, c'est pourquoi cet exemple teste si %%C est strictement supérieur à 0 (pour n'afficher que les fichiers trouvés).
Noter que la casse est importante dans les boucles DOS FOR. En effet, %%C est différent de %%c. Ce qui surprend contrairement à shell bash par exemple où l'on l'habitude de ce comportement. Il y a donc 52 variables globales disponibles.

# Format
## Description

FORMAT est une commande externe qui permet de formater un disque dur, une disquette.

## Utilisation

Options:

### /Q

    Formatage rapide.

### /V:nom

    Nom de volume attribué au disque.

### /FS:sys_fich

    Système de fichiers (exemples: FAT, FAT32, exFAT, NTFS ou UDF).
Exemple:
Le formatage d'un disque l'initialise, et supprime les éventuelles données existantes.

# Goto
## Introduction

Commande interne DOS, elle est utilisée dans un batch pour poursuivre l'exécution au label spécifié.

## Utilisation
### Terminer un batch ou une sous-routine

Pour sortir du batch ou d'une sous-routine, le label spécial :eof peut être utilisé :

# Help
## Introduction

La commande HELP permet d'obtenir l'aide des commandes DOS

## Utilisation

Donne la liste des commandes avec leur résumé
Donne une aide précise sur une commande particulière. Cela revient parfois à faire:

## Exemples
# Hostname

Affiche le nom de l'ordinateur.

# If
## Introduction

Commande interne DOS, elle est utilisée pour exécuter une commande si une condition est vraie.

## Utilisation

commande n'est exécutée que si condition est vraie.
La commande commande_vrai n'est exécutée que si condition est vraie. Sinon, la commande commande_faux est exécutée.

### Plusieurs commandes

Les commandes ne sont exécutées que si condition est vraie.
Les commandes commandes_vrai ne sont exécutées que si condition est vraie. Sinon, les commandes commandes_faux sont exécutées.

### Condition

La commande IF supporte différents types de condition.

#### Tester le code de retour

Toute application ou commande retourne un entier, valant 0 quand tout s'est bien passé, et différent de zéro sinon.
Cette syntaxe teste si la commande précédente a retourné un code supérieur ou égal à n.
Exemple:
Cette syntaxe teste si la commande précédente a retourné un code strictement inférieur à n.
Exemple:

#### Tester l'existence d'un fichier

La commande est exécutée si le fichier existe.
La commande est exécutée si le fichier n'existe pas.

#### Comparer deux chaînes de caractères

L'option /I permet d'ignorer la casse (A=a). op peut valoir :
* EQU : égal à
* NEQ : différent de
* LSS : inférieur à
* LEQ : inférieur ou égal à
* GTR : supérieur à
* GEQ : supérieur ou égal à
La comparaison de chaîne est lexicographique. Si les deux chaînes ne sont composées que de chiffres, une comparaison numérique est effectuée.
La variable d'environnement %ERRORLEVEL% contient le code de retour de la dernière commande, et peut être testée avec cette syntaxe.

#### Tester une variable d'environnement

Teste si la variable indiquée existe.

# Ipconfig

Affiche les paramètres/détails des connexions réseau actives (en environnement Windows).

## Exemples

Voir toutes les informations réseaux (adresses IP, DNS, etc.) :
Flusher le cache DNS :

# Label
## Introduction

Un label est un point d'exécution dans un batch, utilisé par la commande goto.
On peut également l'utiliser comme commentaire, car les labels sont ignorés, à moins qu'une commande goto correspondante soit utilisée.

## Utilisation
### Exemple
# Mkdir
## Introduction

Make Directory
Commande interne DOS, elle permet de créer un nouveau répertoire.

## Utilisation

chemin désigne le chemin incluant le nom du nouveau répertoire.

### Options

Cette commande ne possède aucune option.

### Exemples
# Mkdir
## Introduction

Make Directory
Commande interne DOS, elle permet de créer un nouveau répertoire.

## Utilisation

chemin désigne le chemin incluant le nom du nouveau répertoire.

### Options

Cette commande ne possède aucune option.

### Exemples
# Mklink

MKLINK est une commande DOS qui crée un raccourci NTFS. Ce raccourci redirige de façon transparente les accès des logiciels ainsi que du système au dossier, sous-dossier et fichier sans que le chemin d'accès soit altéré.
Ex :
Il est surtout utilisé afin de déplacer le répertoire de profil d'un utilisateur sans avoir à reconfigurer le système.
Voici comment déplacer le profil d'un utilisateur spécifique sous Windows 7.
* Si ce n'est pas déjà fait, il faut activer le compte administrateur. Pour ce faire, il faut se rendre dans la liste des utilisateurs dans le panneau de configuration ou dans le module de gestion de l'ordinateur. Il n'est pas obligatoire de se servir de ce compte mais il ne faut pas oublier que l'utilisateur dont le dossier doit être déplacé ne peut pas être utilisé et ce même s'il est administrateur car le profil ne peut être déplacé s'il est en cours d'utilisation.
* Se connecter avec l'utilisateur administrateur.
* Déplacer le répertoire du profil de l'utilisateur à l'endroit voulu.
* Une fois le répertoire déplacé, il est très important de s'assurer que les autorisations NTFS sont correctes. Il faut donc s'assurer que le répertoire ainsi que tous les répertoires parents jusqu'à la racine du volume dans lequel il se retrouve soient vérifiés. L'utilisateur SYSTEM doit avoir accès complet ainsi que le groupe Users (Utilisateurs). Par contre, le répertoire du profil doit être configuré pour ne pas hériter des autorisations NFTS car le groupe Users (Utilisateurs) ne doit pas y être et l'usager concerné doit avoir un accès complet.
* Créer le raccourci avec la commande MKLINK. Si l'utilisateur est Paul et que son dossier a été déplacé de C:\Users\Paul à D:\Paul, voici la commande: MKLINK /D C:\Users\Paul D:\Paul Le raccourcis C:\Users\Paul va apparaître.
* S'assurer que le raccourci lui-même a les mêmes droits NTFS que le dossier réel. Cela évite l'apparition des cadenas sur les sous-dossiers de l'utilisateur.
Voilà ! Il ne reste plus qu'à se reconnecter avec l'usager et si tout va bien la connexion se passe comme d'habitude. Sinon, un profil temporaire est utilisé.

# Move
## Introduction

Move
Cette commande permet de déplacer des fichiers et renommer des répertoires.

## Utilisation

Pour déplacer un ou plusieurs fichiers :
Pour renommer un répertoire:

## Paramètres
### [lecteur:][chemin]fichier1

    Spécifie l'emplacement et le nom du ou des fichiers que vous voulez déplacer.

### destination

    Spécifie le nouvel emplacement du fichier. Destination peut être une lettre de lecteur et deux-points (:), un nom de répertoire, ou une combinaison. Si vous déplacez un seul fichier, vous pouvez aussi inclure un nom de fichier si vous voulez renommer le fichier en le déplaçant.

### [lecteur:][chemin]répertoire1

    Spécifie le répertoire que vous voulez renommer.

### répertoire2

    Spécifie le nouveau nom du répertoire.

### /Y

    Supprime la demande de confirmation de remplacement de fichiers de destination existants.

### /-Y

    Provoque la demande de confirmation de remplacement de fichiers de destination existants.
L'option /Y peut être présente dans la variable d'environnement COPYCMD. Outrepassez ceci en utilisant /-Y dans la ligne de commandes. Par défaut, une demande de confirmation apparaît sauf si la commande MOVE est exécutée depuis un script de commandes.

# Net
## Commandes

Obtenir de l'aide sur les commandes NET faire simplement :
ou :
ou encore pour affiche l'aide écran par écran :
Les commandes disponibles sont :
* NET ACCOUNTS
* NET COMPUTER
* NET CONFIG
* NET CONFIG SERVER
* NET CONFIG WORKSTATION
* NET CONTINUE
* NET FILE
* NET GROUP
* NET HELP
* NET HELPMSG
* NET LOCALGROUP
* NET NAME
* NET PAUSE
* NET PRINT
* NET SEND
* NET SESSION
* NET SHARE
* NET START
* NET STATISTICS
* NET STOP
* NET TIME
* NET USE
* NET USER
* NET VIEW

## Net send

net send envoie des messages sur le LAN. Ex :

## Net start

Permet de lancer un service. Ex :

## Net statistics

Affiche des stats soit sur un serveur, soit un client. Ex :
Uptime :

## Net stop

Contraire de "net start". Ex :

## Net use

net use monte un lecteur réseau. Ex :
NB : il est déconseillé de laisser le mot de passe en clair dans un script.
Pour démonter le lecteur :

### Problèmes connus

Si le lecteur ne monte pas avec : L'erreur système 1219 s'est produite. Plusieurs connexions à un serveur ou à une ressource partagée par le même utilisateur, en utilisant plus d'un nom utilisateur, ne sont pas autorisées. Supprimez toutes les connexions précédentes au serveur ou à la ressource partagée et recommencez.
Alors c'est probablement le partage du dossier cible ou de son parent qu'il faut revoir.

# Netsh

netsh est un utilitaire de configuration réseau.

## Exemples
### Obtenir le mot de passe wifi
# Nslookup
## Introduction

Name Server lookup
Cette commande permet d'interroger un serveur de nom pour :
* résoudre un nom de domaine en une ou plusieurs adresses IP,
* trouvez le nom de domaine associé à une adresse IP,
* obtenir le serveur de mail pour un domaine particulier,

## Utilisation

* mode interactif utilisant le serveur par défaut :
* mode interactif utilisant un serveur particulier :
* recherche hôte en utilisant le serveur par défaut :
* recherche hôte en utilisant un serveur particulier :

### Options

Les options peuvent être spécifiées sur la ligne de commande, par exemple :
Ou en mode interactif avec la commande set :

# Pathping

La commande PathPing est un utilitaire réseau de ligne de commande fourni dans Windows 2000 et au-delà qui combine la fonctionnalité de ping avec celle de tracert. Il est utilisé pour localiser les points présentant une latence et une perte de réseau.

## Aperçu

La commande fournit des détails sur le chemin entre deux hôtes et des statistiques de type ping pour chaque nœud du chemin en fonction d'échantillons prélevés sur une période donnée, en fonction du nombre de nœuds entre l'hôte de début et de fin.
Les avantages de PathPing par rapport à ping et traceroute sont que chaque nœud reçoit un ping à la suite d'une seule commande et que le comportement des nœuds est étudié sur une période de temps prolongée, plutôt que l'échantillon de ping par défaut de quatre messages ou la trace de route unique par défaut traceroute. L'inconvénient est qu'il faut au total 25 secondes par saut pour afficher les statistiques de ping.

## Syntaxe

La syntaxe de commande est :
Options :
* -g host-list Route source libre parmi la liste des hôtes.
* -h maximum_hops Nombre maximum de sauts pour rechercher la cible.
* -i address Utiliser l'adresse source spécifiée.
* -n Ne pas résoudre les adresses à des noms d'hôte.
* -p period Délai d'attente en millisecondes entre les pings.
* -q num_queries Nombre de requêtes par saut.
* -w timeout Délai d'attente en millisecondes pour chaque réponse.
* -P Testez la connectivité RSVP PATH.
* -R Testez si chaque saut est compatible RSVP.
* -T Testez la connectivité à chaque saut avec des étiquettes de priorité de couche 2.
* -4 Forcer l'utilisation d'IPv4.
* -6 Forcer l'utilisation d'IPv6.

## Échantillon
# Pause
## Introduction

Commande interne DOS, elle permet d'interrompre l'exécution d'un programme.
Une invite apparaît sur la sortie (par exemple, Appuyer sur une touche pour continuer...). En appuyant sur une touche, le programme se poursuit.

## Utilisation
### Exemple
# Popd
## Introduction

Pop Directory
Commande interne DOS, elle permet de retourner au répertoire courant précédent la dernière commande pushd.

## Voir

* Commande pushd
* Commande cd

# Prompt

Change le prompt, c'est-à-dire ce qu'il y a avant le curseur de la console.

### Exemple
# Pushd
## Introduction

Push Directory
Commande interne DOS, elle permet de modifier le répertoire courant en mémorisant les répertoires courants précédents.

## Voir

* Commande popd
* Commande cd

# Rmdir
## Introduction

Remove Directory
Commande interne DOS, elle permet de supprimer un répertoire vide.

## Utilisation

Le chemin désigne le répertoire à supprimer.

### Options
#### /S

    Supprime tous les sous-répertoires et fichiers également.

#### /Q

    Pas de confirmation avant la suppression si l'option /S est utilisée.

### Exemples
# Rem
## Introduction

Remark
Commande interne DOS, elle permet d'ignorer le commentaire qui suit.

## Utilisation
### Exemples

Pour ne pas afficher les lignes commentées dans la console, utiliser :

# Replace
## Rôle

Copie et déplace des fichiers sélectionnés.

## Paramètres

Précise le nom et l'emplacement du fichier ou du groupe de fichier source.
Précise l'emplacement du fichier cible. Vous ne pouvez pas spécifier le nom des fichiers de remplacement. Si vous ne précisez ni une unité ni un répertoire, replace utilise l'unité et le répertoire en cours en tant que cible.

## Commutateurs

* /a Ajoute de nouveaux fichiers au répertoire cible au lieu de remplacer des fichiers existants. Ce commutateur ne peut pas être utilisé avec les commutateurs /s et /u
* /p Sollicite une confirmation de votre part avant de remplacer un fichier cible ou avant d'ajouter un fichier source.
* /r Remplace les fichiers lecture seule ainsi que les fichiers non protégés. Si vous ne précisez pas ce commutateur. Toute tentative de remplacement d'un fichier lecture seule est traitée comme une erreur et le processus de remplacement est arrêté.
* /s Cherche dans tous les sous répertoires du répertoire cible et remplace les fichiers qui correspondent. Ce commutateur ne peut pas être utilisé avec le commutateur /a. La commande replace ne recherche pas dans les sous-répertoire précisés dans chemin1.
* /w Attend que vous placiez un disque dans l'unité avant de commencer à rechercher les fichiers sources. Si vous ne précisez pas ce commutateur, replace commence à remplacer ou ajouter les fichiers immédiatement après que vous aurez appuyé sur la touche ENTREE.
* /u Remplace (met à jour) uniquement les fichiers du répertoire cible qui sont plus anciens que ceux du répertoire source. Ce commutateur ne peut pas être utilisé avec le commutateur /a

## Remarques

Si vous disposez d'un système à disquette et qu'il vous faut changer de disquette pendant une opération de remplacement, vous pouvez préciser le commutateur /w pour que la commande replace s'arrête et attende que vous changiez de disquette avant de procéder au remplacement.
Vous ne pouvez pas utiliser cette commande pour mettre à jour des fichiers cachés ou des fichiers systèmes.

## Exemple

Pour mettre à jour tous les fichiers intitulé essai.001 qui se trouve sur le disque dur C par une version plus récente qui se trouve sur une disquette dans le lecteur A.

# Rmdir
## Introduction

Remove Directory
Commande interne DOS, elle permet de supprimer un répertoire vide.

## Utilisation

Le chemin désigne le répertoire à supprimer.

### Options
#### /S

    Supprime tous les sous-répertoires et fichiers également.

#### /Q

    Pas de confirmation avant la suppression si l'option /S est utilisée.

### Exemples
# Robocopy

Robocopy est un logiciel de synchronisation de données en local ou sur un partage distant uniquement utilisable dans l' environnement Windows
Développé par Microsoft
Très facile à utiliser . Il possède beaucoup d' options . Les seules obligatoires sont les dossiers source et destination
options robocopy :
/R répétition des tentatives si erreurs
/W temps d' attention entre chaque tentative de synchro
/mir copie miroir
/np pas de barre de progression
/LOG le script créé un log qui permet de visualiser ce qui s'est passé pendant la synchro
/E
Des dossiers de la source peuvent etre exclus de la synchro avec une option spécifique
exemple de syntaxe :
robocopy /R:1 /W:1 "dossier_source_local_ou_distant" "\\dossier_destination_local_ou_distant" /mir /np /LOG:c:\logs.txt /E
Une info intéressante est la fin des logs :
la colonne FAILED comporte uniquement des 0 s' il n' y a pas d' erreurs pendant la synchro
Total Copied Skipped Mismatch FAILED Extras
Dirs : 12001 12000 1 0 0 0
Files : 99618 99615 0 0 3 0
Bytes : 42.020 g 42.019 g 0 0 512.0 k 0
Times : 4:24:42 4:04:24 0:00:00 0:20:17
Speed : 3076608 Bytes/sec.
Speed : 176.044 MegaBytes/min.
Ended : Fri Dec 01 00:42:02 2017

# Rsh

Permet de lancer des commandes distantes sur un serveur Unix Syntaxe : rsh nom d'hote (-l utilisateur) (-n) commande

# Rsm

Cette commande permet d'effectuer la gestion des ressources média en utilisant unité de stockage amovible.

# Runas

Pour lancer des commandes avec un autre compte que celui de la session courante.

## Utilisation

Démarrer, exécuter (touche Windows + R) :
Ne marche pas avec "localhost" au lieu du nom de la machine, il faut retirer ce dernier pour lancer sous un compte local.

## Exemple
# Sc

Sc.exe permet de gérer les services Windows (visibles dans démarrer, exécuter, services.msc).

## Utilisation

Création du service :
Changement du dossier où il est exécuté :
Suppression du service :

## Références

* ↑ https://docs.microsoft.com/fr-fr/windows-server/administration/windows-commands/sc-create

# Set
## Introduction

La commande SET permet d'afficher ou de modifier une variable d'environnement.
Il est à noter que toutes les versions de MSDOS ne supportent pas forcement les implémentations qui vont suivre. C'est surtout à partir de NT5 (W2000 XP W2003) que le CLI "Command Line Interpreter" commence vraiment à s'étoffer.

## Utilisation
### Affichage de variables

Si aucun nom de variable n'est indiqué, la commande affiche toutes les variables d'environnement avec leur contenu. Ceci est utile pour chercher une variable telle qu'un répertoire utilisateur. Si un nom est indiqué, la commande liste toutes les variables commençant par ce nom

### Affectation de variables

Les variables sont très utiles dans un environnement de script ou batch (un programme).

#### Affectation de chaînes

la commande SET permet d'affecter une valeur à une variable nommée. Exemple :
la variable X vient d'être initialisée avec la valeur "unechainedecaractère". Chaque instanciation de la console (on peut exécuter cmd.exe plusieurs fois simultanément sous Windows) possède son propre environnement (une zone mémoire) dans lequel sont stockées toutes les variables.
Contrairement à beaucoup d'autres langages de programmation, le signe égal de la déclaration ne peut pas être précédé ou suivi d'un espace.

#### Affectation d'expressions numériques

Le commutateur /A permet d'évaluer des expressions numériques. Par exemple:
Ceci affecte 5 à la variable d'environnement X. Si le commutateur n'était pas présent, X aurait pris la chaine 3+2 sans faire le calcul, et ce, quelle que soit l'utilisation ultérieure de la variable dans l'environnement.
Les expressions utilisent les caractères suivants:
Les opérandes constituant l'expression à calculer peuvent être écrits en notation décimale, hexadécimale ou octale. Cela peut générer des erreurs de calculs ou des messages d'erreur pas toujours très clairs.
Retourne un message d'erreur :
Tout nombre commençant par zéro (tel 0099) est considéré comme octal (chiffre de 0 à 7 inclus). Donc 8 et 9 ne peuvent apparaitre dans un tel nombre.
La commande correcte est la suivante :

#### Affectation utilisateur

Le commutateur /P permet d'initialiser une variable par une entrée clavier utilisateur.
Cette commande affiche à l'écran le message, et attend que l'utilisateur donne une chaîne de caractères qui sera alors mémorisée dans la variable.

### Suppression de variables

Supprimera la variable "monnom" de l'environnement (la mémoire), en d'autres termes cela libèrera l'espace mémoire occupé par la variable.

### Manipulation de variables

Pour récupérer la valeur d'une variable il suffit d'entourer son nom par des %. Par exemple:
Il est possible de ne récupérer qu'une partie de la chaîne de caractère contenue dans une variable d'environnement. Par exemple :
Ceci récupère la chaîne à partir du caractère 5 jusqu'à la fin
Ceci récupère la chaîne à partir du caractère 5 jusqu'aux 2 caractères suivants.
Si la valeur indiquée est négative, cela signifie un indexage à partir de la fin de la chaine :
Ceci récupère la chaîne du 2ème caractère en partant du début jusqu'au 2ème caractère en partant de la fin.
Il est possible de rechercher un chaine dans une variable et de la remplacer par une autre :
Ainsi avec la commande suivante, il est possible d'éliminer l'extension .bat du nom d'un fichier :

### Variables prédéfinies

Lorsqu'une console de commandes DOS est lancée, certaines variables sont déjà définies.

#### Variables d'information système

Afin de connaître ces variables, il suffit de lister toutes les variables (dépendantes de l'OS) pour y repérer celles qui peuvent servir :
| Nom de variable | Signification |
| %PATH% | Liste des répertoires où chercher les applications par défaut |
| %WINDIR% | Répertoire de windows |
| %USERPROFILE% | Répertoire utilisateur |
| %USERNAME% | Nom de l'utilisateur |
| %TEMP% | Répertoire temporaire |
| %OS% | Nom de l'OS |

#### Variables dynamiques

Certaines variables sont des variables dynamiques du système, c'est-à-dire que leur valeur est modifiée automatiquement selon les changements de contexte ou recalculée à chaque lecture.
| Nom de variable | Signification |
| %CD% | Répertoire courant |
| %DATE% | Date courante (même résultat que DATE /T) |
| %TIME% | Heure courante (même résultat que TIME /T) |
| %RANDOM% | Nombre pseudo-aléatoire compris entre 0 et 32767 |
| %ERRORLEVEL% | Erreur de la commande précédente |

#### Les paramètres de commande

%0 %1 %2... %9 correspondent à la commande (%0) et aux arguments ou paramètres ou commutateurs (%1 à %9) qui suivent la commande (séparés par des espaces) %* contient l'ensemble des paramètres %1 à %9.
Ils permettent de passer des variables au sein d'un fichier batch (traitement par lot) introduit par l'utilisateur au moment du lancement de la commande (d'où le nom de commutateur). À noter : %0 contient toujours le nom du fichier de commande qui est exécuté actuellement (tel qu'il a été saisi en ligne de commande ; ainsi, si on saisit "test" pour exécuter "c:\windows\system32\test.bat", $0 contiendra "test" seul).

## Exemple

Le script suivant est un jeu montrant quelques utilisations de la commande SET
La première variable utilisée est val contenant la valeur à rechercher. Elle est initialisée avec la variable dynamique RANDOM que l'on divise par 1/10ème de la valeur maximale aléatoire possible, afin d'avoir un nombre compris entre 0 et 9. La deuxième variable utilisée est nbEssais contenant le nombre d'essais laissés à l'utilisateur pour trouver le nombre. Elle est initialisée à 3 et décrémentée de 1 à chaque demande grâce à l'opérateur -= La troisième variable utilisée est n contenant la valeur entrée par l'utilisateur. Cette variable est initialisée avec le commutateur /P afin de demander une entrée clavier.

## Exemple 2

Il s'agit lors de la sauvegarde de toute ou partie du système de créer un nom de fichier unique structuré comme suit: NOMFICHIER_DATA_TIME_RANDOM

# Shift
## Introduction

La commande SHIFT permet de faire un décalage des paramètres.
Dans un script, il est possible d'accéder aux paramètres de la ligne de commande en utilisant les variables %0, %1, %2, etc. L'appel de la commande SHIFT décale le contenu des variables dans la variable précédente, ainsi %0 contient ce que contenait %1, %1 contient ce que contenait %2, etc.
Ceci peut être utile pour lister et traiter tous les paramètres. Il suffit de ne lire que la variable %1 et de faire un appel à la commande SHIFT à chaque boucle.

## Utilisation

n représente un nombre indiquant le paramètre à partir duquel le décalage des paramètres commence.

## Exemple

Le script suivant affiche les informations sur les paramètres de la ligne de commande en bouclant sur ceux-ci.
Dans cet exemple, la boucle s'arrête lorsque le paramètre est un texte vide signifiant qu'il n'y a plus de paramètre.
Si les paramètres attendus par le batch sont des noms de fichier, pour éviter une erreur avec les noms de fichiers contenant des espaces sur la ligne de code
Il faut passer par une variable intermédiaire et un test de l’existence de cette variable Comme ceci :

# Shutdown

La commande "Shutdown" permet d'éteindre un ordinateur, de fermer la session, ou de forcer des applications en cours à se fermer :
Si vous écrivez
shutdown
vous aurez l'équivalent de
shutdown /?
Le commutateur "s" éteint le système ;
r" le redémarre ;
"l" ferme la session ;
"t" permet de définir un délai en secondes, donc si vous écrivez :
shutdown -s -t 360
Le système s'éteindra dans 6 minutes .
Si vous voulez annuler une mise hors tension (par exemple dans le cas de la fixation d'un délai) vous pouvez utiliser l'option "a"
Si après la commande précédente (shutdown -s -t 360) vous voulez annuler la mise en hors tension du système, tapez
shutdown -a

# Start

La commande start permet de spécifier et d’exécuter un programme.

## Exemples

Pour l’exécution de l'invite de commande à partir d'un START, cela peut ce fait de plusieurs manières :
* En indiquant le chemin d’accès du fichier ou programme :
* En ajoutant directement le nom du fichier ou programme a exécuter :
* Une URL s'ouvrira sur la navigateur par défaut :
Pour l’exécution des programmes installer il faudra toujours y ajouter le chemin d’accès
Il est plus prudent de toujours mettre l’extension du programme à exécuter.

### Lancer une commande avec des paramètres

Si la commande contient des paramètres :

### Lancer en arrière-plan

Utiliser l'option "background" :

# Subst
## Introduction

La commande SUBST est une commande externe (subst.exe) qui permet d'associer un chemin (lettre de lecteur et répertoire) à un lecteur virtuel (une lettre de lecteur non utilisée).
Le nouveau lecteur virtuel est donc une sorte de "raccourci" vers un répertoire. Le répertoire peut être local à la machine, ou distant.

## Syntaxe

* Ajout d'une substitution : SUBST [lettre1: [lettre2:]répertoire]
* Suppression d'une substitution : SUBST lettre1: /D
* Liste des substitutions actuellement actives : SUBST
Avec :
* lettre1:
* [lettre2:]répertoire
* /D

## Exemples
### Exemple 1

Scénario simple : on créé une substitution sur le répertoire "C:\Program Files", puis on la supprime.
C:\>subst
C:\>subst w: "C:\Program Files"
C:\>w:
W:\>dir
W:\>c:
C:\>dir "C:\Program Files"
C:\>subst w: C:\WINDOWS Lecteur déjà affecté par SUBST
C:\>subst w: /D
C:\>subst
C:\>
On voit que la commande dir "C:\Program Files" et dir seule sur le lecteur W:\ donnent le même résultat : il s'agit bien du même répertoire.

### Exemple 2

Substitution d'un répertoire partagé sur une autre machine (substitution réseau).
C:\>subst W: "\\machine.domaine.fr\Répertoire partagé"
C:\>subst W:\: => UNC\machine.domaine.fr\Répertoire partagé
C:\>subst w: /D
C:\>subst
C:\>

# Time
## Introduction

La commande TIME permet de modifier l'heure système, ou simplement de la lire.

## Utilisation

Si aucun paramètre n'est spécifié, la commande demande à l'utilisateur la nouvelle heure.
Le commutateur /T permet d'afficher l'heure courante sans rien demander (aucune attente).
Si une heure est spécifiée en paramètre, l'heure système est modifiée.

### Résultat
## Exemple
### Lecture

Le script suivant récupère le retour de TIME /T grâce à la commande For et découpe la ligne suivant les caractères : pour ne récupérer que certaines informations.
Le script suivant récupère le retour de %TIME% grâce à la commande For et découpe la ligne suivant les caractères : pour ne récupérer que certaines informations. Note, ce script ne permet pas de récupérer l'heure sur 2 digits contrairement à l'autre.

### Écriture
## Voir aussi

* La commande Date.

# Timeout
## Introduction

Cette commande crée un délai d'attente spécifié en secondes (abrégeable par une frappe de touche. Notons qu'un paramètre peut empêcher cet abrègement.).

## Syntaxe
### Options
#### /T

    Spécifie le délai d'attente (en secondes.). Ce délai peut aller de -1 à 99999 secondes.

#### /NOBREAK

    Fait ignorer à la commande tout appui de touche jusqu'à la fin du délai. Notez toutefois que la combinaison de touches ConTRoL+C peut annuler le délai.

## Exemples

Remarque: Un délai d'attente égal à -1 secondes signifie qu'une frappe de touche est attendue.
Cet exemple requiert que l'on entre la combinaison de touches ConTRoL+C.

# Title
## Introduction

Commande interne DOS, elle permet de modifier le titre de la fenêtre de l'interpréteur.

## Utilisation
### Exemple
# Tree

Commande Fichier Batch - TREE
Affiche une carte graphique de l'arborescence d'un répertoire
Crée une carte graphique de répertoires et sous répertoires. La structure affichée par arbre dépend des paramètres que vous spécifiez sur la ligne de commande.

## Syntaxe

tree[Lecteur:] [Chemin] [/f] [/a]
paramètres
Entraînement : indique le lecteur qui contient le disque pour lequel vous souhaitez afficher le répertoire structure.
Chemin d'accès : indique le répertoire pour lequel vous voulez afficher la structure de répertoire.
/f : affiche les noms des fichiers dans chaque répertoire.
/a : indique que l'arbre est d'utiliser des caractères de texte à la place de caractères graphiques pour montrer les lignes reliant sous-répertoires.
Par exemple, utiliser un dossier comme C:\WINDOWS\TEMP ou C:\WINNT\TEMP de sorte que vous ne serez pas submergé en le testant.
TREE/F affichera les noms de fichiers en plus de répertoires.
Pour envoyer la sortie vers un fichier texte : TREE /A> mymap.txt. L'/ A utilisera formatage simple qui va mieux lire dans le fichier de sortie.
Exemples
Pour afficher, un écran à la fois, les fichiers dans tous les répertoires sur le lecteur C, tapez :
TREE c: \/f | more
Pour imprimer la même liste que l'exemple précédent affiche, Type: TREE c: \/f prn
Vue pour exemple

# Type
## Description

TYPE est la commande interne qui permet d'afficher le contenu des fichiers.

## Utilisation

Cette commande ne tient pas compte des attributs du fichier. C'est à dire qu'elle permet d'afficher le contenu de fichiers cachés.

# Ver
## Introduction

Version information
Commande interne DOS, elle affiche la version de l'interpréteur.

## Utilisation
### Exemple
# Vol
## Introduction

Volume name
La commande VOL permet d'obtenir les informations de nom et numéro de série d'une partition.

## Utilisation

Si le lecteur n'est pas présent, la commande retourne les informations de la partition dans laquelle se trouve le répertoire courant.

## Exemples

Le script suivant permet d'isoler le nom et le numéro de série grâce à la commande DOS/For
La commande VOL retournant deux lignes, la variable %ligneCourante% permet d'identifier sur quelle ligne le FOR se trouve. Le découpage se fait sur les mots, et c'est à partir du 8ème mot pour les deux lignes qu'apparaissent les données intéressantes (en français).

# Where

Cette commande indique les emplacements des exécutables.

## Exemple
# Whoami
## Introduction

La commande Whoami permet d'obtenir les informations d'identification de l'utilisateur courant (« qui suis-je ? », en anglais : "Who am I ?").

## Utilisation

Si aucune option n'est spécifiée, la commande affiche le nom de complet de l'utilisateur incluant le nom de la machine ou de domaine, sous la forme :
Exemple :
Exemple avec toutes les informations au format csv :

# Wmic

Windows Management Instrumentation (WMI) est l’implémentation de Microsoft du Web-Based Enterprise Management (WBEM), le standard du Distributed Management Task Force (DMTF). Il prend en charge le modèle de données CIM (Common Information Model), qui décrit les objets d'un environnement de gestion.
WMIC (Windows Management Instrumentation Command-line) fournit une interface de ligne de commande dans l'Infrastructure de gestion Windows (WMI) qui permet de tirer parti de WMI pour gérer les ordinateurs. Windows PowerShell permet aussi d'utiliser simplement WMI depuis la ligne de commande.

## Qu'est-ce que WMI ?

WMI est l'implémentation par Microsoft du modèle commun d'information (Common Information Model (CIM) en anglais) développé par le comité spécial de la gestion distribuée (the Distributed Management Task Force (DMTF)). Le DMTF est une association de diverse entreprises de l'informatique (e.g. Novell, Microsoft, Cisco, HP, etc.) développant des normes dans l'espace de gestion des entreprises (Voir http://www.dmtf.org pour plus d'information). Comme les grandes entreprises ont beaucoup d'ordinateurs avec beaucoup d'environnement logiciels, gérer divers environnements peut être un grand défi. Afin d'unifier les techniques de gestion pour la simplicité, le DMTF a défini le CIM pour représenter les entités gérables du monde réel de manière unifiée. Le modèle objet du CIM utilise des termes et une sémantique uniques à tous les constructeurs et développeurs logiciels. Ce modèle objet est implémenté dans une base de données appelée dépôt CIM (CIM repository), comme illustré dans le schéma ci-dessous.
Ajouter les schémas référencés dans le texte
Cette page nécessite une traduction. Si vous connaissez cette langue et le sujet de la page, vous pouvez poursuivre ou corriger la traduction.
Based on the CIM model, WMI includes real-world manageable components, available from the DMTF standards with some specific extensions that represent the various Windows components. Moreover, WMI exposes a collection of COM scriptable objects that allow various applications to take advantage of the management information. WMI is the Microsoft implementation of CIM.
As part of the installation process, most of the Microsoft applications available today (e.g. SQL 2000, Exchange 2000/2003, Office 2000/XP/2003, Internet Explorer 6.0, Host Integration Server, Automated Deployment Services) extend the standard CIM object model to add the representation of their manageable entities in the CIM repository. This representation is called a class, and it exposes information through properties and allows the execution of some actions via methods. The access to the manageable entities is made via a software component, called a “provider” which is nothing else than a DLL implementing a COM object written in C/C++ (See note at the end of this section). Because a provider is designed to access some specific management information, the CIM repository is also logically divided into several areas called a namespace. Each namespace contains a set of providers with their related classes specific to a management area (i.e. RootDirectorydap for active directory, rootsnmp for snmp information or rootmicrosoftiisv2 for internet information server information).
to locate the huge amount of management information available from the cim repository, wmi comes with a sql-like language called the wmi query language (wql). briefly, wql is a subset of the standard american national standards institute structured query language (ansi sql) with minor semantic changes. a basic wql query remains fairly understandable for people with a basic sql knowledge. therefore, wql is dedicated to wmi and is designed to perform queries against the cim repository to retrieve information or get event notifications.
more information about some of the terms that cim is using is available on msdn at http://msdn.microsoft.com/library/en-us/dnwmi/html/cim.asp and http://msdn.microsoft.com/library/en-us/dnwmi/html/wmicim.asp.

## What is the overall development process?

Because WMI abstracts the manageable entities with CIM and a collection of providers, the development of a provider implies several steps. Although there are 4 major steps with some sub-steps, each of them taken separately are quite easy to execute. These can be summarized as follows:
Step 1 – Create the manageable entity model
* Define a model
* Implement the model
Step 2 – Create the WMI Provider
* Determines the provider type to implement
* Determines the hosting model of the provider
* Create the provider template with the ATL wizard
* Implement the code logic in the provider
* Register the provider with WMI and the system
Step 3 - Test the provider
Step 4 - Create consumer sample codes

## Why is it important to write a WMI provider for our customers?

Since the release of the first WMI implementation during the Windows NT 4.0 SP4 era (as an out-of-band download), Microsoft never stopped to add WMI providers in Windows. Under Windows NT 4.0, Microsoft had roughly 15 WMI providers available once WMI was installed. When Windows 2000 was released, customers discovered 29 WMI providers part of the Operating System installation. More recently, with the release of Windows Server 2003, Microsoft included in the platform more than 80 WMI providers. This has been a sign for many customers that WMI became at Microsoft the “ubiquitous” management layer of Windows, even if this commitment has never been explicit from Microsoft. This is the net result of the on-going work made during the last Windows release.
During these last years, due to a constant increasing exposure of management data through WMI in Windows, more and more people in the field started to develop scripts and automation procedures based on WMI. Beyond the scripting needs, most leading management software in the world, such as MOM, SMS, ADS, HP OpenView for Windows (HPOV), BMC, CA, or Kaseya are WMI-enabled and capable to consume and provide WMI information through various User Interfaces. This enables administrators and operators, not capable to script or program on top of WMI, to enjoy the benefits of WMI without even learning about WMI. However, if they want to, because WMI is scriptable, it gives the opportunity to any of them to consume WMI information from scripts or from any Enterprise Management software that is WMI-aware.
These trends have made WMI very popular among our customers management communities. Tons of references and publications exist on the Internet about WMI. At the same time, this story increased our customer expectations because the management communities leveraging WMI today expect our management layer to be predictable and consistent through WMI for more and more Windows manageable components. This also means that our customers expect to leverage the knowledge and investment made in WMI during these past years to improve, pursue and achieve their business goals at lower cost.

## What WMI offers for free out-of-the box?

For someone willing to develop one or many WMI providers, WMI offers many features out of the box. Here are the most important advantages:
* Automation interfaces: Because WMI comes with a set of automation interfaces ready to use, all management features supported by a WMI provider and its set of classes get the scripting support for free out-of-the box. Beyond the WMI class design and the provider development, the Microsoft development and test teams are not required to create, validate and test a scripting model as it is already available from WMI.
* .NET Management interfaces: Because the System.Management namespace relies on the existing COM/DCOM plumbing, the created WMI provider and its set of WMI classes becomes automatically available to all .NET applications independently of the language used (e.g. C#, VB.NET). Beyond the WMI class design and the provider development, like for scripting, the Microsoft development and test teams are not required to create, validate and test new assemblies to support a new namespace in the .NET Framework as this support is already available from WMI for free.
* C/C++ COM/DCOM programming interfaces: Like most components in Windows, COM/DCOM programmers can leverage the features of the provider they develop at the COM/DCOM interfaces level. Like in previous environments (Scripting and .NET Framework), a COM/DCOM consumer just needs to interact with the standard set of WMI COM interfaces to leverage the WMI provider capabilities and its set of supported WMI classes. To make all management information available from the native APIs, the WMI provider developer just needs to interact with a set of pre-defined WMI COM interfaces. This will make the management information available at the WMI COM level automatically. Moreover, the scripting COM interface object model is very similar to the COM/DCOM interface object model, which makes life very easy for developers to be familiar with the scripting experience.
* Remoting capabilities over DCOM and SOAP: More than simply offering local COM capabilities, as management is all about remoting, WMI offers the DCOM transport. In addition, SOAP transport will be available in Windows Server 2003 R2 through the WS-Management initiative lead by Microsoft, INTEL, SUN and DELL. This initiative allows to run any scripts remotely or to consume WMI data through a specific set of interfaces handling SOAP requests/responses. The big advantage for the WMI provider developer is when he exposes all his features through WMI, WS-Management can in turn consume that information as well (embedded objects in WMI instances are not supported in R2. It is however a target for Longhorn). All the layering to WS-Management and the mapping of the CIM data model to SOAP comes for free out of the WMI/WS-Management solution. In the event DCOM must be used, implementing DCOM requires the presence of a proxy DLL deployed on each client machine. As WMI is available in the Windows Operating System since Windows 2000, you don’t need deal with these issues either.
* Support for Queries: WMI offers support for WQL queries out of the box. This means that if a provider is not designed to support queries, WMI supports it by using an enumeration technique out of your provider. That implies that you get the WQL query support for free.
* Eventing capabilities: WMI offers the capability to notify a subscriber for any event it is interested in. WMI uses the WMI Query Language (WQL) to submit WQL event queries and defines the type of events to be returned. The eventing mechanism, with all related call-backs, is part of the WMI COM/DCOM and automation interfaces. Any one writing a WMI provider can have the benefit of this functionality at no cost for his customers. It will be up to the consumer to decide how it wants to consume the management information exposed by the WMI provider and its related set of WMI classes.
* Code template generator: To speed up the process of writing a WMI provider including all COM/DCOM interfaces and related definitions, the WMI team developed the WMI ATL Wizard to generate the code template implementing a provider. The code generated is based on the WMI class model initially designed by the developer. The WMI provider developer will be able to interface the pre-defined COM/DCOM interfaces for the WMI provider with its set of native APIs retrieving the management information to expose. The exercise consists in filling the “gaps” in the provider code to create the desired interfacing logic.
* Predictability: Predictability is an important concern for our customers because it defines the capability of someone having an experience with a set of interfaces managing a Windows component to apply this knowledge right away, intuitively, to any other manageable Windows component without having relearn everything from ground up. Predictability for a customer is a real gain as it increases the Return of Investment (ROI). A person facing such a situation simply expects things to work the same way based on his previous experience. The constant increase of COM programming/scriptable interfaces has a huge impact on the predictability, as this causes more pain to our customers to automate, manage Windows and leverage their existing knowledge. WMI with CIM address this problem by always exposing the same programming object model (COM/DCOM, Automation, .NET) whatever the manageable entity is.
* Protect existing customer investments: Protecting customers and partners investment motivates customers to invest in technologies. As Microsoft did invest a lot these past years in writing WMI providers (more than 80 in Windows Server 2003), customers and partners invested in tools leveraging the WMI capabilities of Windows. Therefore, it is a common sense for them to continue to exploit these capabilities instead of having to use a (new) set of specific interfaces for each Windows manageable component. A specific set of interfaces means having a specific set of agents or in-house developed software based on a new model or set of interfaces especially dedicated to a component or technology. By leveraging the capabilities of WMI today, customers and partners can leverage the work investment made in the past while minimizing their costs in developments, learning curves and new discoveries. This will also have a great impact on the stability and reliability of their infrastructure as they continue to leverage an existing implementation with an improved technology.
* Provide a logical and unified administration model: As briefly described before in the introduction, this model is based on an industry standard called CIM defined by the DMTF (http://www.dmtf.org). The CIM class-based schema is defined by a consortium of constructors and software developers that meets the requirements of the industry. This implies that not only Microsoft leverages the WMI capabilities, but also any other third party constructors or developers write their own code to fit into the model (For instance, INTEL is doing this for some their network driver adapters and software. HP is leveraging existing WMI providers and implementing their own WMI providers in their HP Open View Enterprise Management software. IBM consumes WMI from the Tivoli management suite, MOM and SMS are also consuming and providing WMI information. Last but not least, WMI XP SP2 is leveraging WMI to get information status from anti-virus software and firewall).

## What do you need to work with WMI?

From a development perspective, you must run Windows 2000, Windows XP or Windows Server 2003. Visual Studio 2003 or 2005 must be installed on the machine. The latest service pack and fixes are obviously recommended. The Windows machine doesn’t have to be part of any domain unless the provider you plan to develop requires to access information in the domain. For testing purposes the Windows installation can run as a virtual machine with Virtual PC 2004 or Virtual Server 2005 (See http://msdn.microsoft.com/library/en-us/wmisdk/wmi/system_requirements.asp for more information).
Note: This document has been written with Visual Studio 2005 Beta 1 (Whidbey). It will be updated when Beta 2. If you use Visual Studio 2003, don’t be surprised if your screen shots don’t match the ones you have in this document.
Some WMI tools can also be very useful during the design and development phases. These tools are:
* The MOF compiler (MOFCOMP.Exe): The Managed Object Format (MOF) compiler parses a file containing Managed Object Format statements and adds the classes and class instances defined in the file to the CIM repository. The MOF format is a specific syntax to define CIM class representation in an ASCII file (e.g. MIB are to SNMP such as MOF files are to CIM). MOFCOMP.Exe is included in every WMI installation. Every definition existing in the CIM repository is initially defined in a MOF file. MOF files are located in %SystemRoot%\system32\wbem. During the WMI setup, they are loaded in the CIM repository.
* The WMI Administrative Tools: The WMI Administrative Tools are made of four tools: WMI CIM Studio, WMI Object Browser, WMI Event Registration and WMI Event viewer. You can download these tools from http://www.microsoft.com/downloads/details.aspx?FamilyID=6430f853-1120-48db-8cc5-f2abdc3ed314&DisplayLang=en. The most important tool for a WMI provider development is WMI CIM Studio as it helps in the initial WMI class creation in the CIM repository. It uses a web interface to display information and relies on a collection of ActiveX components installed on the system when it runs for the first time. WMI CIM Studio provides the ability to:
** Connect to a chosen system and browse the CIM repository in any namespace available.
** Search for classes by their name, by their descriptions or by property names.
** Review the properties, methods and associations related to a given class.
** See the instances available for a given class of the examined system.
** Perform Queries in the WQL language.
** Generate a MOF file based on selected classes.
** Compile a MOF file to load it in the CIM repository.
* Winmgmt.Exe: WinMgmt.Exe is not a tool; it is the executable that implements the WMI Core service. Under Windows NT, Windows 2000 and Windows Server 2003, WMI runs as a service. On computers running Windows 98, Windows 95 or Windows Millennium, WMI runs as an application. Under Windows NT, Windows 2000, Windows XP or Windows Server 2003, it is also possible to run this executable as an application, in which case, the executable runs in the current user context. For this the WMI service must be stopped first. The executable supports some switches that can be useful when starting WMI as a service or as an application. WMI provider developers who may want to debug their providers essentially need to run the WMI service as an application.
* WBEMTEST.Exe: WBEMTEST.Exe is a WMI tester tool, which is delivered in standard with WMI. This tool allows an administrator or a developer to perform most of the tasks from a graphical interface that WMI provides at the API level. Although available under Windows NT, Windows 2000, Windows XP and Windows Server 2003, this tool is not officially supported by Microsoft. Actually, the usage of this tool is not easy at first glance unless you are used to the WMI COM API and the WMI concepts. With WBEMTEST, you can:
** Enumerate, open, create and delete classes.
** Enumerate, open, create and delete instances of classes.
** Select a namespace.
** Perform data and event queries.
** Execute methods associated to classes or instances.
** Execute every WMI operation asynchronously, synchronously or semi-asynchronously.
* The WMI command line tool (WMIC): WMIC is a command-line tool designed to ease WMI information retrieval about a system by using some simple keywords (aliases). WMIC.Exe is only available under Windows XP Professional and Windows Server 2003. It is not included in other Windows platforms. By typing “WMIC /?” from the command-line, you can obtain a complete list of the switches and reserved keywords available. By typing “WMIC switch-name /?”, you can gather more information about the switch usage.
* WBEMDUMP.Exe: WBEMDUMP is a tool delivered with the Platform SDK. This command line tool comes with its own Visual C++ project. Basically, the tool can show the CIM repository classes, instances, or both. It is possible to retrieve the same information as that retrieved with WMIC. WBEMDUMP.Exe requires more specific knowledge about WMI, as it doesn’t abstract WMI as WMIC. However, it runs under Windows NT 4.0 and Windows 2000. It is also possible to execute methods exposed by classes or instances. Even if it is not a standard WMI tool delivered with the system installation, this tool can be quite useful for exploring the CIM repository and WMI features.

## Comment vérifier que le WMI est bien opérationnel sur la machine

Si le WMI est totalement opérationnel sur la machine, alors vous obtiendrez le message "connexion réussie" lors du contrôle du WMI, comme sur cette image : (aller sur "Gestion de l'ordinateur", bouton droit sur Contrôle WMI, puis "Propriétés")
Dans le cas contraire, il faudra alors passer au paragraphe "Réparation du WMI"...
Nota : Microsoft propose aussi un outil de vérification du service WMI, en anglais (WMIDiag.exe), et appelé "WMI Diagnosis Utility" : https://www.microsoft.com/en-us/download/details.aspx?id=7684 ; cet outil fonctionne actuellement sous Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 et Windows Server 2012 R2.

## Réparation du WMI

* Lancer la réparation sous un compte administrateur.
* À la fin de la réparation du WMI, il vous faudra aussi procéder à la réparation du « System Center Configuration Manager » (SCCM, anciennement « agent SMS ») si par hasard il était présent sur votre système.

### Sous Microsoft Windows XP (au moins avec Service Pack 2)

Il vous suffira d'ouvrir une fenêtre "DOS" (Démarrer/exécuter/CMD <entrée>), puis de taper les commandes suivantes l'une après l'autre :
* cd /d %windir%\system32\wbem <entrée>
* net stop ccmexec /y <entrée>
* net stop sharedaccess /y <entrée>
* net stop winmgmt /y <entrée>
* rd /S /Q repository <entrée>
* rundll32 wbemupgd, UpgradeRepository <entrée>
Nota : il se peut que certains services tels que CCMEXEC ou SHAREDACCESS n'existent pas sur votre configuration, ça ne posera pas de problème pour la suite de la réparation.
Une fois que la dernière commande de réparation sera terminée, vous reviendrez au prompt. Vous devrez alors procéder à un reboot de l'ordinateur. C'est tout.

### Sous Microsoft Windows Server 2003 (au moins avec Service Pack 1)

Il vous suffira d'ouvrir une fenêtre "DOS" (Démarrer/exécuter/CMD <entrée>), puis de taper les commandes suivantes l'une après l'autre :
* cd /d %windir%\system32\wbem <entrée>
* net stop ccmexec /y <entrée>
* net stop sharedaccess /y <entrée>
* net stop winmgmt /y <entrée>
* rd /S /Q repository <entrée>
* rundll32 wbemupgd, RepairWMISetup <entrée>
Nota : il se peut que certains services tels que CCMEXEC ou SHAREDACCESS n'existent pas sur votre configuration, ça ne posera pas de problème pour la suite de la réparation.
Une fois que la dernière commande de réparation sera terminée, vous reviendrez au prompt. Vous devrez alors procéder à un reboot de la machine. C'est tout.

### Sous Microsoft Windows Vista, Windows 7, Windows 8, Windows 10, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2

Il vous faudra lancer l'invite de commande en tant qu'administrateur (clic droit dessus puis sur "exécuter en tant qu'administrateur" pour le faire en mode d'élévation de privilèges). Puis vous taperez les commandes suivantes l'une après l'autre :
* cd /d %windir%\system32\wbem <entrée>
* net stop ccmexec /y <entrée>
* net stop sharedaccess /y <entrée>
* net stop winmgmt /y <entrée>
* rd /S /Q repository <entrée>
* net start winmgmt <entrée>
* winmgmt /salvagerepository <entrée>
Nota : il se peut que certains services tels que CCMEXEC ou SHAREDACCESS n'existent pas sur votre configuration, ça ne posera pas de problème pour la suite de la réparation.
Une fois que la dernière commande de réparation sera terminée, vous reviendrez au prompt. Vous devrez alors procéder à un reboot de la machine. C'est tout.

### Sous autres (anciennes) versions Microsoft Windows

Nota : Ca provoquera un reset de la configuration ICS et ICF.
Il vous suffira d'ouvrir une fenêtre "DOS" (Démarrer/exécuter/CMD <entrée>), puis de taper les commandes suivantes l'une après l'autre :
* winmgmt /clearadap <entrée>
* winmgmt /kill <entrée>
* winmgmt /unregserver <entrée>
* winmgmt /regserver <entrée>
* winmgmt /resyncperf <entrée>
* net stop winmgmt /y <entrée>
* del %windir%\system32\Wbem\Repository\*.* /s <entrée>
* net start winmgmt <entrée>
* %windir%\system32\wbem\wbemtest.exe <entrée>
Une fois que la dernière commande de réparation sera terminée, vous reviendrez au prompt. Vous devrez alors procéder à un reboot de la machine. C'est tout.