<t>PowerShell est l’outil d’administration incontournable pour tout professionnel IT travaillant dans l’écosystème Microsoft. Que vous soyez administrateur système, ingénieur DevOps ou utilisateur avancé de Windows, maîtriser PowerShell vous fera gagner un temps considérable et vous permettra d’automatiser des tâches répétitives. Voici les 50 commandes essentielles organisées par thématique, avec des exemples concrets, des explications en français et des cas d’usage réels.<br/>
Prérequis et configuration de PowerShell<br/>
Avant de commencer, assurez-vous d’utiliser PowerShell 7+ (cross-platform, plus performant) plutôt que Windows PowerShell 5.1. Installez-le via :<br/>
Installer PowerShell 7 via winget<br/>
winget install Microsoft.PowerShell<br/>
<br/>
Vérifier la version installée<br/>
$PSVersionTable<br/>
<br/>
Configurer la politique d'exécution (nécessaire pour les scripts)<br/>
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser<br/>
<br/>
- Informations système<br/>
1. Informations complètes sur le système<br/>
Get-ComputerInfo<br/>
<br/>
2. Informations condensées (OS, version, architecture)<br/>
Get-ComputerInfo | Select-Object CsName, WindowsProductName, OsArchitecture, OsVersion<br/>
<br/>
3. Uptime du système (depuis le dernier démarrage)<br/>
(Get-Date) - (gcim Win32_OperatingSystem).LastBootUpTime<br/>
<br/>
4. Informations sur le processeur<br/>
Get-CimInstance -ClassName Win32_Processor | Select-Object Name, NumberOfCores, MaxClockSpeed<br/>
<br/>
5. Informations sur la RAM<br/>
Get-CimInstance -ClassName Win32_PhysicalMemory |<br/>
Measure-Object -Property Capacity -Sum |<br/>
Select-Object @{Name="RAM_Total_Go"; Expression={[math]::Round($_.Sum/1GB, 2)}}<br/>
<br/>
6. Espace disque disponible<br/>
Get-PSDrive -PSProvider FileSystem | Select-Object Name, @{N="Utilisé(Go)";E={[math]::Round($.Used/1GB,2)}}, @{N="Libre(Go)";E={[math]::Round($.Free/1GB,2)}}<br/>
<br/>
- Gestion des processus<br/>
7. Lister tous les processus triés par consommation CPU<br/>
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, CPU, WorkingSet<br/>
<br/>
8. Trouver un processus spécifique<br/>
Get-Process -Name "chrome" -ErrorAction SilentlyContinue<br/>
<br/>
9. Arrêter un processus par nom<br/>
Stop-Process -Name "notepad" -Force<br/>
<br/>
10. Arrêter tous les processus d'une application<br/>
Get-Process -Name "chrome" | Stop-Process -Force<br/>
<br/>
11. Lancer une application<br/>
Start-Process -FilePath "notepad.exe"<br/>
<br/>
12. Lancer une application avec élévation (administrateur)<br/>
Start-Process -FilePath "powershell.exe" -Verb RunAs<br/>
<br/>
- Gestion des services Windows<br/>
13. Lister tous les services en cours d'exécution<br/>
Get-Service | Where-Object {$_.Status -eq "Running"} | Sort-Object DisplayName<br/>
<br/>
14. Vérifier le statut d'un service spécifique<br/>
Get-Service -Name "wuauserv" # Windows Update<br/>
<br/>
15. Démarrer, arrêter, redémarrer un service<br/>
Start-Service -Name "Spooler"<br/>
Stop-Service -Name "Spooler" -Force<br/>
Restart-Service -Name "Spooler"<br/>
<br/>
16. Configurer le démarrage automatique d'un service<br/>
Set-Service -Name "Spooler" -StartupType Automatic<br/>
<br/>
17. Trouver les services en échec (stopped mais configurés en auto)<br/>
Get-Service | Where-Object {$.StartType -eq "Automatic" -and $.Status -eq "Stopped"}<br/>
<br/>
- Gestion des fichiers et dossiers<br/>
18. Lister le contenu d'un dossier (avec détails)<br/>
Get-ChildItem -Path "C:\Users\$env:USERNAME\Documents" -Recurse -File |<br/>
Sort-Object LastWriteTime -Descending |<br/>
Select-Object -First 20 Name, Length, LastWriteTime<br/>
<br/>
19. Copier des fichiers avec progression<br/>
Copy-Item -Path "C:\Source*" -Destination "D:\Backup\" -Recurse -Verbose<br/>
<br/>
20. Déplacer des fichiers<br/>
Move-Item -Path "C:\Temp\rapport.pdf" -Destination "C:\Documents\Rapports\"<br/>
<br/>
21. Supprimer des fichiers plus vieux que X jours<br/>
Get-ChildItem -Path "C:\Logs\" -File |<br/>
Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} |<br/>
Remove-Item -Force<br/>
<br/>
22. Calculer la taille d'un dossier<br/>
$taille = (Get-ChildItem -Path "C:\Users\$env:USERNAME" -Recurse -ErrorAction SilentlyContinue |<br/>
Measure-Object -Property Length -Sum).Sum<br/>
[math]::Round($taille / 1GB, 2)<br/>
<br/>
23. Rechercher des fichiers par nom ou extension<br/>
Get-ChildItem -Path "C:\" -Filter "*.log" -Recurse -ErrorAction SilentlyContinue<br/>
<br/>
24. Créer une arborescence de dossiers<br/>
New-Item -Path "C:\Projets\2026\Client_ABC\Documents" -ItemType Directory -Force<br/>
<br/>
- Gestion du réseau<br/>
25. Afficher la configuration réseau complète<br/>
Get-NetIPConfiguration<br/>
<br/>
26. Obtenir l'adresse IP publique<br/>
(Invoke-WebRequest -Uri "https://api.ipify.org" -UseBasicParsing).Content<br/>
<br/>
27. Tester la connectivité (ping évolué)<br/>
Test-Connection -ComputerName "google.com" -Count 4<br/>
<br/>
28. Tester si un port est ouvert<br/>
Test-NetConnection -ComputerName "smtp.office365.com" -Port 587<br/>
<br/>
29. Afficher les connexions TCP actives<br/>
Get-NetTCPConnection |<br/>
Where-Object {$_.State -eq "Established"} |<br/>
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort<br/>
<br/>
30. Vider le cache DNS<br/>
Clear-DnsClientCache<br/>
<br/>
31. Résoudre un nom DNS<br/>
Resolve-DnsName -Name "microsoft.com" -Type A<br/>
<br/>
32. Afficher les cartes réseau et leur état<br/>
Get-NetAdapter | Select-Object Name, Status, MacAddress, LinkSpeed<br/>
<br/>
- Gestion des utilisateurs et groupes<br/>
33. Lister tous les utilisateurs locaux<br/>
Get-LocalUser | Select-Object Name, Enabled, LastLogon<br/>
<br/>
34. Créer un utilisateur local<br/>
$password = Read-Host -AsSecureString -Prompt "Mot de passe"<br/>
New-LocalUser -Name "NouvelUtilisateur" -Password $password -FullName "Prénom Nom" -Description "Compte de test"<br/>
<br/>
35. Ajouter un utilisateur à un groupe local<br/>
Add-LocalGroupMember -Group "Administrateurs" -Member "NouvelUtilisateur"<br/>
<br/>
36. Désactiver un compte utilisateur<br/>
Disable-LocalUser -Name "AncienEmploye"<br/>
<br/>
37. Lister les membres d'un groupe local<br/>
Get-LocalGroupMember -Group "Administrateurs"<br/>
<br/>
38. Forcer le changement de mot de passe à la prochaine connexion (Active Directory)<br/>
Nécessite le module RSAT ActiveDirectory<br/>
Set-ADUser -Identity "jdupont" -ChangePasswordAtLogon $true<br/>
<br/>
- Windows Update et gestion des mises à jour<br/>
39. Installer le module PSWindowsUpdate<br/>
Install-Module PSWindowsUpdate -Force -AllowClobber<br/>
<br/>
40. Vérifier les mises à jour disponibles<br/>
Get-WindowsUpdate<br/>
<br/>
41. Installer toutes les mises à jour disponibles automatiquement<br/>
Install-WindowsUpdate -AcceptAll -AutoReboot<br/>
<br/>
42. Voir l'historique des mises à jour installées<br/>
Get-WUHistory | Select-Object -First 20 Title, Date, Result<br/>
<br/>
43. Réinitialiser le cache Windows Update (résout de nombreux problèmes)<br/>
Stop-Service wuauserv, bits, cryptsvc -Force<br/>
Remove-Item "$env:SystemRoot\SoftwareDistribution*" -Recurse -Force -ErrorAction SilentlyContinue<br/>
Start-Service wuauserv, bits, cryptsvc<br/>
<br/>
- Sécurité et antivirus<br/>
44. Vérifier l'état de Windows Defender<br/>
Get-MpComputerStatus | Select-Object AMRunningMode, AntivirusEnabled, RealTimeProtectionEnabled, TamperProtectionSource, NISEnabled<br/>
<br/>
45. Lancer un scan rapide<br/>
Start-MpScan -ScanType QuickScan<br/>
<br/>
46. Lancer un scan complet (longue durée)<br/>
Start-MpScan -ScanType FullScan<br/>
<br/>
47. Mettre à jour les définitions antivirus<br/>
Update-MpSignature<br/>
<br/>
48. Vérifier les événements de sécurité récents (connexions, échecs)<br/>
Get-WinEvent -LogName Security -MaxEvents 50 |<br/>
Where-Object {$_.Id -in @(4624, 4625, 4648)} |<br/>
Select-Object TimeCreated, Id, Message |<br/>
Format-List<br/>
<br/>
- Automatisation et scripts<br/>
49. Planifier une tâche automatique<br/>
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\sauvegarde.ps1"<br/>
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"<br/>
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 2)<br/>
Register-ScheduledTask -TaskName "SauvegardeNuit" -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest<br/>
<br/>
50. Générer un rapport système complet en HTML<br/>
$rapport = @"<br/>
<html><head><title>Rapport Système</title></head><body><br/>
<h1>Rapport généré le $(Get-Date -Format 'dd/MM/yyyy HH:mm')</h1><br/>
<h2>Informations système</h2><br/>
$(Get-ComputerInfo | Select-Object CsName, WindowsProductName, OsArchitecture | ConvertTo-Html -Fragment)<br/>
<h2>Services actifs</h2><br/>
$(Get-Service | Where-Object Status -eq Running | Select-Object Name, DisplayName | ConvertTo-Html -Fragment)<br/>
</body></html><br/>
"@<br/>
$rapport | Out-File "C:\Rapports\rapport_systeme_$(Get-Date -Format 'yyyyMMdd').html" -Encoding UTF8<br/>
Write-Host "Rapport généré !" -ForegroundColor Green<br/>
<br/>
Astuces PowerShell pour gagner du temps<br/>
Alias utiles<br/>
PowerShell dispose d'alias pour les commandes courantes<br/>
ls # = Get-ChildItem<br/>
cd # = Set-Location<br/>
cp # = Copy-Item<br/>
mv # = Move-Item<br/>
rm # = Remove-Item<br/>
cat # = Get-Content<br/>
echo # = Write-Output<br/>
<br/>
Créer vos propres alias<br/>
Set-Alias -Name monalias -Value Get-Process<br/>
<br/>
Pipeline et filtrage avancé<br/>
Chaîner les commandes avec le pipeline ( | )<br/>
Get-Process | Where-Object {$_.CPU -gt 10} | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU<br/>
<br/>
Exporter vers CSV<br/>
Get-Process | Export-Csv -Path "C:\Temp\processus.csv" -NoTypeInformation -Encoding UTF8<br/>
<br/>
Exporter vers JSON<br/>
Get-Service | ConvertTo-Json | Out-File "C:\Temp\services.json" -Encoding UTF8<br/>
<br/>
Gestion des erreurs dans les scripts<br/>
Capturer et gérer les erreurs<br/>
try {<br/>
Get-Item "C:\FichierInexistant.txt" -ErrorAction Stop<br/>
} catch [System.IO.FileNotFoundException] {<br/>
Write-Warning "Fichier non trouvé : $"<br/>
} catch {<br/>
Write-Error "Erreur inattendue : $"<br/>
} finally {<br/>
Write-Host "Nettoyage effectué"<br/>
}<br/>
<br/>
Ressources pour aller plus loin<br/>
Pour progresser en PowerShell, voici les meilleures ressources en français et en anglais :<br/>
<br/>
Documentation officielle Microsoft : learn.microsoft.com/fr-fr/powershell<br/>
PowerShell Gallery : powershellgallery.com — milliers de modules et scripts<br/>
SS64.com : référence rapide de toutes les commandes<br/>
GitHub : dépôts de scripts PowerShell open source<br/>
Formation LinkedIn Learning : cours PowerShell en français disponibles<br/>
<br/>
Conclusion<br/>
Ces 50 commandes couvrent l’essentiel des besoins d’administration Windows au quotidien. La clé pour progresser est de pratiquer régulièrement : commencez par les commandes d’information système (sans risque), puis progressez vers la gestion des services et l’automatisation.<br/>
Votre progression recommandée :<br/>
<br/>
Niveau débutant (semaine 1-2) : maîtrisez les commandes 1 à 12 (système et processus)<br/>
Niveau intermédiaire (semaine 3-4) : services, fichiers et réseau (commandes 13 à 32)<br/>
Niveau avancé (mois 2) : utilisateurs, mises à jour, sécurité (33 à 48)<br/>
Expert (mois 3+) : automatisation, scripts complexes, modules avancés<br/>
<br/>
Conseil final : créez un dossier C:\Scripts\ et sauvegardez vos commandes favorites dans des fichiers .ps1 réutilisables. Commentez abondamment votre code — votre futur vous vous remerciera !<br/>
Partagez vos commandes PowerShell préférées en commentaires, et posez vos questions si certaines ne fonctionnent pas dans votre environnement !</t>