PowerShell est aujourd’hui l’interface en ligne de commande recommandée par Microsoft pour l’administration, la gestion système et l’automatisation.
Comment ouvrir PowerShell sous Windows ?
Pour l’ouvrir :
- Appuyez sur ⊞ Win + X.
- Choisissez Windows PowerShell ou, mieux encore, Terminal Windows (si vous l’avez installé).
- Pour les droits administrateur : cliquez sur « Windows PowerShell (Admin) ».
Astuce moderne : Sur Windows 10/11, Microsoft pousse Windows Terminal comme interface unifiée. Il intègre PowerShell, CMD, WSL, Azure Cloud Shell, etc., avec onglets, thèmes et support Unicode complet. À installer via le Microsoft Store si ce n’est pas déjà fait.
PowerShell n’est pas qu’une « meilleure invite de commande » : c’est un langage de script orienté objet, intégré à .NET, conçu pour l’automatisation, la gestion à distance et l’interopérabilité.
Comment copier un dossier avec PowerShell ?
Copy-Item -Path "C:\source\mon-dossier" -Destination "C:\destination\" -Recurse
-Recurse: indispensable pour copier tous les sous-dossiers et fichiers.- Les chemins peuvent être relatifs ou absolus.
- Si le dossier de destination n’existe pas, PowerShell le crée automatiquement (contrairement à certaines commandes anciennes).
Exemple concret
Copy-Item -Path .\projet-site -Destination D:\sauvegardes\ -Recurse
Cmdlets à connaître
Voici les commandes (plus exactement : cmdlets) à connaître absolument.
- Get-ComputerInfo
Affiche des dizaines d’informations sur le système : OS, BIOS, processeur, mémoire, disques, etc.
Remplace : systeminfo - Get-NetIPConfiguration
Donne la configuration réseau complète (IP, masque, passerelle, DNS).
Pour renouveler l’IP :
Restart-NetAdapter -Name « Wi-Fi »
Remplace : ipconfig - Get-ItemProperty (et registre)
Pour gérer les associations de fichiers via le registre :
Get-ItemProperty ‘HKCR:.txt’
Set-ItemProperty ‘HKCR:.txt’ ‘(Default)’ ‘MonApp’
Remplace : assoc (mais plus puissant et scriptable) - Compare-Object
Compare deux listes, fichiers ou objets :
Compare-Object (Get-Content a.txt) (Get-Content b.txt)
Remplace : fc — mais avec analyse sémantique et export possible (JSON, CSV…) - cipher.exe (appel direct)
PowerShell n’a pas de cmdlet native équivalente à cipher /w, donc on appelle directement l’exécutable :
cipher /w:D:
À encapsuler dans un script PowerShell si besoin. - Repair-Volume
Depuis PowerShell 5+, vous pouvez lancer une vérification disque :
Repair-Volume -DriveLetter C -Scan
Repair-Volume -DriveLetter C -OfflineScanAndFix
Remplace : chkdsk (plus intégré, plus lisible) - Get-Process & Stop-Process
- Get-Process : liste les processus (filtrables, triables).
- Stop-Process -Name « notepad » -Force : ferme proprement.
Beaucoup plus puissant que tasklist/taskkill
- Get-NetTCPConnection
Affiche toutes les connexions TCP actives, avec état, PID, port local/distant.
Exemple :
Get-NetTCPConnection | Where-Object { $_.State -eq ‘Listen’ }
Remplace : netstat — mais avec objets manipulables - powercfg.exe (toujours utilisé)
PowerShell n’a pas encore de cmdlet native pour tout powercfg, donc on l’appelle directement :
powercfg /batteryreport /output « C:\rapport.html »
Mais on peut enrichir le résultat avec du parsing en PowerShell. - Repair-WindowsImage
Pour réparer l’image système (en complément de SFC) :
Repair-WindowsImage -Online -RestoreHealth
Complète : sfc /scannow (SFC reste utile, mais PowerShell gère aussi DISM) - Stop-Computer / Restart-Computer
- Restart-Computer -Force
- Stop-Computer -ComputerName SRV01 (à distance !)
Remplace largement : shutdown.exe
- Get-Disk, Get-Partition, Format-Volume
Gestion complète des disques :
Get-Disk
Initialize-Disk -Number 1 -PartitionStyle GPT
New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter D
Format-Volume -DriveLetter D -FileSystem exFAT -NewFileSystemLabel « MaCle »
Remplace entièrement : diskpart et format — en scriptable et lisible - Test-NetConnection
La cmdlet réseau tout-en-un :
- Test-NetConnection google.com remplace ping
- Test-NetConnection google.com -TraceRoute remplace tracert
- Test-NetConnection google.com -Port 443 pour le test de port – Remplace : telnet
- Resolve-DnsName
Interroge les serveurs DNS :
Resolve-DnsName google.com
Resolve-DnsName google.com -Server 8.8.8.8
Remplace : nslookup — avec sortie objet et export JSON - $PSVersionTable / [Environment]::OSVersion
Affiche la version de PowerShell ET de Windows :
$PSVersionTable
[Environment]::OSVersion
Plus riche que ver - Get-Service & Start-Service
Gestion des services Windows :
Get-Service | Where-Object { $_.Status -eq ‘Running’ }
Start-Service -Name « Spooler » - Get-WinEvent
Analyse des journaux système :
Get-WinEvent -LogName System -MaxEvents 10 - Export-Csv / ConvertTo-Json
Exportez n’importe quelle sortie vers des formats exploitables :
Get-Process | Select-Object Name, CPU, WS | Export-Csv processus.csv -Encoding UTF8
Kit de survie indispensables commandes Powershell pour les tâches courantes
| Tâche | Commande PowerShell | Équivalent ancien |
|---|---|---|
| Infos système | Get-ComputerInfo | systeminfo |
| IP & réseau | Get-NetIPConfiguration | ipconfig |
| Renouveler IP Wi-Fi | Restart-NetAdapter -Name "Wi-Fi" | ipconfig /renew |
| Comparer deux fichiers | Compare-Object (Get-Content a.txt) (Get-Content b.txt) | fc |
| Lister processus | Get-Process | tasklist |
| Tuer un processus | Stop-Process -Name "notepad" | taskkill |
| Tester une connexion | Test-NetConnection google.com -Port 443 | telnet ou ping |
| Résoudre un nom DNS | Resolve-DnsName google.com | nslookup |
| Gérer les disques | Get-Disk, Format-Volume, etc. | diskpart |
| Redémarrer à distance | Restart-Computer -ComputerName SRV01 | shutdown /r /m \\SRV01 |
| Exporter des données | `Get-Process | Export-Csv -Encoding UTF8` |
Pourquoi PowerShell plutôt que CMD ou Git Bash ?
- Objets, pas du texte : chaque commande retourne des objets manipulables (pas juste des chaînes de caractères).
- Intégration .NET : accès direct aux bibliothèques Windows.
- Scriptable et automatisable : idéal pour les workflows de sauvegarde, déploiement, ou documentation (très utile en digital humanities ou en UX-SEO).
- Unicode natif : vous pouvez manipuler plusieurs langues sans corruption d’encodage.
Équivalents PowerShell des commandes POSIX essentielles
| Commande Bash / POSIX | Fonction | Équivalent PowerShell | Remarques |
|---|---|---|---|
pwd | Afficher le dossier courant | Get-Location ou pwd | pwd fonctionne aussi (alias de Get-Location) |
ls ou ls -la | Lister les fichiers | Get-ChildItem ou ls / dir | ls et dir sont des alias. Pour les fichiers cachés : Get-ChildItem -Force |
cd chemin | Se déplacer dans un dossier | Set-Location chemin ou cd chemin | cd est un alias → fonctionne comme sous Bash |
cd ou cd ~ | Aller dans le dossier personnel | cd ~ | Fonctionne ! ~ est reconnu comme $HOME |
cd .. | Remonter d’un dossier | cd .. | Identique → fonctionne |
mkdir nom | Créer un dossier | New-Item -ItemType Directory -Name nom ou mkdir nom | mkdir est un alias → utilisable tel quel |
cp source dest | Copier un fichier | Copy-Item source dest ou cp source dest | cp est un alias → mais attention : pas de -r |
cp -r dossier/ dest/ | Copier un dossier récursif | Copy-Item -Recurse dossier dest | Option -Recurse obligatoire (pas d’option -r) |
mv source dest | Déplacer ou renommer | Move-Item source dest ou mv source dest | mv est un alias → fonctionne |
rm fichier | Supprimer un fichier | Remove-Item fichier ou rm fichier | rm est un alias |
rm -rf dossier/ | Supprimer un dossier récursif | Remove-Item -Recurse -Force dossier | Pas de -rf → utiliser -Recurse -Force |
- Les alias existent, mais cachent des différences :
Même sils,cd,cpfonctionnent en PowerShell, leur comportement n’est pas identique à Bash (ex. :cp -r→ n’existe pas ; il faut-Recurse). - Pas de support natif pour les outils Unix classiques :
Pas degrep,sed,awk,jq,rsync→ sauf si installés via WSL, Git Bash ou MSYS2. - Encodage et Unicode :
PowerShell a longtemps eu des problèmes avec UTF-8 (surtout pour les caractères comme ⵜ, ع, או). Même en 2025, Linux/macOS restent plus fiables pour les langues non latines. - Non portable :
Un script PowerShell ne fonctionne pas sur Linux/macOS sans adaptation. Un script Bash (POSIX) fonctionne partout si l’environnement est conforme.