Sous Windows, le mot shell peut désigner plusieurs choses très différentes : l’ancien environnement DOS, l’invite de commandes cmd.exe, PowerShell, le shell graphique de Windows ou encore Bash exécuté grâce à WSL.
Pour comprendre l’écosystème actuel, il faut surtout distinguer trois concepts : le shell, qui interprète les commandes ; le terminal, qui fournit l’interface dans laquelle le shell s’affiche ; et la console, qui désigne historiquement une partie de l’infrastructure permettant les interactions en mode texte.
Windows Terminal, CMD et PowerShell ne sont donc pas trois versions successives du même logiciel : Windows Terminal affiche des shells, tandis que CMD et PowerShell sont eux-mêmes des interpréteurs de commandes.
De MS-DOS à CMD : même air de famille, autre système
MS-DOS utilisait principalement COMMAND.COM comme interpréteur de commandes. On y exécutait déjà des commandes devenues familières :
DIR
CD
COPY
DEL
TYPE
Les scripts batch utilisaient les extensions .BAT et permettaient déjà d’automatiser certaines opérations. L’environnement était rudimentaire comparé aux shells modernes, mais il ne faut pas le confondre avec l’actuel Windows.
Les versions modernes de Windows appartiennent à la famille Windows NT. Leur interpréteur historique en ligne de commande est :
cmd.exe
CMD a volontairement conservé énormément de syntaxe et de commandes familières aux utilisateurs DOS. D’où l’impression qu’il s’agit simplement de « DOS dans une fenêtre ». Techniquement, ce n’est pourtant pas MS-DOS qui tourne sous Windows 11.
CMD sait faire plus que lancer ping
L’invite de commandes possède notamment :
- des variables d’environnement avec
SET; - des conditions avec
IF; - des boucles avec
FOR; - des sous-programmes avec
CALL; - des branchements avec
GOTO; - des redirections avec
>et>>; - des pipelines avec
|; - une gestion de codes de retour via
ERRORLEVEL.
Par exemple :
@echo off
if exist rapport.txt (
echo Le fichier existe
) else (
echo Fichier absent
)
for %%F in (*.log) do (
echo %%F
)
CMD possède donc bel et bien des structures de contrôle. Le problème est plutôt leur syntaxe parfois déroutante et l’accumulation de particularités historiques.
L’expansion des variables dans les blocs en est un bon exemple. Pour certains scripts, il faut activer l’expansion différée :
setlocal EnableDelayedExpansion
À partir d’un certain niveau de complexité, l’administrateur découvre que le script batch fonctionne parfaitement, à condition de ne plus jamais le regarder directement dans les yeux.
Le shell graphique et Windows Terminal : deux notions différentes
Windows possède également un shell graphique. L’Explorateur Windows, la barre des tâches, le bureau et différentes composantes de l’interface constituent l’environnement interactif utilisé quotidiennement par la majorité des utilisateurs.
Le shell graphique est excellent pour des tâches ponctuelles : parcourir des fichiers, ouvrir une application, modifier quelques paramètres. Il devient moins efficace lorsqu’il faut répéter exactement la même opération sur 500 machines ou traiter 30 000 fichiers selon des critères précis.
Windows Terminal
Windows Terminal répond à un autre besoin. C’est une application terminal moderne capable d’héberger plusieurs environnements :
PowerShell
Windows PowerShell
Command Prompt
WSL
Azure Cloud Shell
SSH
autres profils personnalisés
Il apporte notamment :
- onglets ;
- volets ;
- profils multiples ;
- personnalisation de l’affichage ;
- raccourcis configurables ;
- rendu moderne du texte et des caractères Unicode.
Ouvrir CMD dans Windows Terminal ne transforme donc pas CMD en PowerShell. Cela revient simplement à afficher le même shell dans une meilleure fenêtre.
De la même manière, ouvrir Debian WSL dans Windows Terminal ne transforme pas Bash en application Windows native. Terminal s’occupe de l’interface ; le shell reste celui de l’environnement sélectionné.
PowerShell : un shell conçu pour l’administration
Microsoft a lancé PowerShell en 2006 avec une idée très différente de celle des shells traditionnels : au lieu de faire circuler uniquement du texte entre les commandes, les cmdlets PowerShell peuvent transmettre des objets structurés.
La différence apparaît très vite.
Avec PowerShell :
Get-Process
ne renvoie pas seulement un joli tableau destiné à l’écran. Il produit des objets représentant réellement les processus, avec des propriétés et méthodes exploitables.
On peut donc écrire :
Get-Process |
Where-Object CPU -gt 10 |
Sort-Object CPU -Descending |
Select-Object Name, CPU, Id
Le pipeline transporte ici des objets processus. Chaque commande peut travailler directement sur leurs propriétés au lieu de devoir découper des colonnes de texte.
Quelques exemples courants
# Lister les services actifs
Get-Service |
Where-Object Status -eq 'Running'
# Lister les fichiers .log
Get-ChildItem C:\Logs -Filter *.log
# Rechercher une chaîne
Select-String -Path C:\Logs\*.log -Pattern 'erreur'
# Afficher quelques propriétés système
Get-ComputerInfo |
Select-Object WindowsProductName, WindowsVersion, CsTotalPhysicalMemory
PowerShell possède également des fonctions, modules, classes, exceptions, commandes de gestion à distance et un système d’aide intégré.
Pour obtenir l’aide d’une commande :
Get-Help Get-Process
Pour rechercher les commandes liées à un sujet :
Get-Command *service*
Pour inspecter les propriétés d’un objet :
Get-Process | Get-Member
Windows PowerShell 5.1 et PowerShell 7.x
Deux environnements doivent aujourd’hui être distingués.
| Windows PowerShell 5.1 | PowerShell 7.x | |
|---|---|---|
| Exécutable | powershell.exe |
pwsh.exe |
| Plateforme | Windows | Windows, Linux, macOS |
| Base .NET | .NET Framework | .NET moderne |
| Positionnement | Compatibilité historique Windows | Développement actuel de PowerShell |
En 2026, PowerShell 7.6 LTS constitue une branche moderne supportée à long terme. Windows PowerShell 5.1 reste néanmoins important parce que certains modules et produits Windows historiques en dépendent encore.
Il est donc parfaitement normal de posséder les deux sur la même machine.
Le pipeline PowerShell n’est pas toujours composé d’objets
Dire « PowerShell transmet des objets, contrairement à CMD » est globalement juste lorsque l’on parle de ses cmdlets. Il faut toutefois ajouter une nuance : PowerShell sait également lancer des programmes natifs classiques.
Par exemple :
ping.exe 1.1.1.1
git.exe status
ipconfig.exe
Ces programmes ne deviennent pas magiquement des cmdlets .NET. Leur sortie reste généralement textuelle.
En revanche :
Get-Process |
Sort-Object CPU
travaille réellement sur les objets retournés par Get-Process.
C’est précisément cette coexistence qui rend PowerShell pratique : il peut utiliser l’écosystème Windows existant tout en proposant un modèle beaucoup plus structuré pour ses propres commandes.
WSL : quand Bash s’installe réellement sous Windows
Windows Subsystem for Linux, ou WSL, permet d’installer et d’utiliser un environnement Linux directement sur une machine Windows.
Selon la distribution installée, on peut alors disposer de :
bash
grep
sed
awk
ssh
find
apt
python
gcc
et de nombreux autres programmes Linux habituels.
L’installation de WSL peut aujourd’hui commencer très simplement depuis un terminal administrateur :
wsl --install
Pour voir les distributions installées :
wsl --list --verbose
On peut également installer une distribution particulière parmi celles disponibles :
wsl --list --online
wsl --install -d Debian
Une fois dans Debian WSL, on se retrouve avec un véritable environnement utilisateur Linux :
uname -a
ls -la
grep -R "erreur" /var/log
sudo apt update
WSL permet également une interopérabilité intéressante. Depuis Linux, les disques Windows sont accessibles par exemple sous :
/mnt/c/
et l’on peut lancer certaines applications Windows depuis le shell Linux.
PowerShell ou WSL ?
Les deux ne remplissent pas exactement le même rôle. Pour administrer Windows, Active Directory, Hyper-V, Microsoft 365 ou les API de nombreux produits Microsoft, PowerShell est généralement le choix naturel.
Pour reproduire un environnement Linux, utiliser les outils GNU, développer pour un serveur Linux ou travailler avec des scripts Bash, WSL est souvent beaucoup plus adapté.
Il n’existe aucune obligation morale de choisir un camp. Un administrateur peut parfaitement utiliser PowerShell à 10 h, Bash à 10 h 05 et CMD à 10 h 07 parce qu’un vieux script de 2004 refuse obstinément d’évoluer.
CMD, PowerShell, Terminal ou WSL : lequel choisir ?
| Outil | Nature | À privilégier pour |
|---|---|---|
| CMD | Shell Windows historique | Commandes classiques, vieux scripts batch, dépannage rapide |
| Windows PowerShell 5.1 | Shell et langage .NET Framework | Modules Windows historiques et compatibilité |
| PowerShell 7.x | Shell et langage moderne multiplateforme | Automatisation, administration, scripting moderne |
| Windows Terminal | Émulateur / application terminal | Héberger CMD, PowerShell, WSL et autres profils |
| WSL | Environnement Linux sous Windows | Bash, outils GNU/Linux, développement Linux |
| Explorateur Windows | Shell graphique | Interaction graphique quotidienne |
CMD n’a donc pas besoin d’être « mis à la retraite ». Il reste présent dans Windows 11 et Windows Server actuels, de nombreuses commandes historiques sont encore supportées et d’innombrables scripts batch continuent de fonctionner.
Pour un nouveau projet d’automatisation conséquent, PowerShell sera néanmoins généralement beaucoup plus agréable et maintenable.
Une commande batch simple reste parfaitement raisonnable :
ipconfig /all
Un système d’automatisation contenant 1 800 lignes de batch, quinze GOTO et une variable nommée FINAL_FINAL2 constitue en revanche un appel discret à envisager PowerShell.
Conclusion : Windows possède désormais plusieurs mondes en ligne de commande
L’histoire des shells Windows n’est pas simplement :
DOS → CMD → PowerShell
La réalité actuelle ressemble davantage à :
CMD + PowerShell + Windows Terminal + WSL + shell graphique
Chaque composant joue un rôle différent. CMD assure une compatibilité remarquable avec plusieurs décennies d’administration Windows. PowerShell apporte un langage d’automatisation moderne et un pipeline orienté objets. WSL offre directement les outils et shells de l’écosystème Linux. Windows Terminal rassemble tout cela dans une interface commune.
La règle pratique est donc simple : utilisez CMD quand une commande classique suffit, PowerShell pour administrer et automatiser Windows, WSL lorsque vous avez besoin d’un environnement Linux, et Windows Terminal pour éviter d’ouvrir quatre fenêtres différentes comme en 2003.
Le vieux prompt C:\> n’est donc pas mort.
Il partage simplement désormais son bureau avec beaucoup plus de colocataires.
