Maîtriser PowerShell pour administrer Windows Server : cmdlets, pipeline, scripts, gestion AD et services.
Windows Server 2022 ou Windows 10/11. PowerShell 5.1 (inclus) ou PowerShell 7+. Pour les commandes AD, le module ActiveDirectory doit être installé.
Les commandes PowerShell s'appellent des cmdlets. Elles suivent la convention Verbe-Nom (Get-Item, Set-Service, New-User...).
# Obtenir de l'aide sur une cmdlet Get-Help Get-Service Get-Help Get-Service -Examples Get-Help Get-Service -Full # Mettre à jour l'aide Update-Help # Lister toutes les cmdlets disponibles Get-Command Get-Command -Verb Get # Toutes les cmdlets Get-* Get-Command -Noun Service # Toutes les cmdlets *-Service # Alias courants ls = Get-ChildItem cd = Set-Location cat = Get-Content cls = Clear-Host
| Cmdlet | Alias | Action |
|---|---|---|
| Get-ChildItem | ls, dir, gci | Lister le contenu d'un répertoire |
| Set-Location | cd | Changer de répertoire |
| Get-Location | pwd | Afficher le répertoire courant |
| Copy-Item | cp, copy | Copier un fichier ou dossier |
| Move-Item | mv, move | Déplacer ou renommer |
| Remove-Item | rm, del | Supprimer |
| New-Item | ni | Créer un fichier ou dossier |
| Get-Content | cat, type | Lire le contenu d'un fichier |
| Set-Content | Écrire dans un fichier (écrase) | |
| Add-Content | Ajouter à la fin d'un fichier |
# Exemples pratiques
Get-ChildItem C:\Windows\System32 -Filter *.exe | Measure-Object
New-Item -Path C:\temp -ItemType Directory
Copy-Item -Path C:\source\fichier.txt -Destination D:\backup\
Get-Content C:\Windows\System32\drivers\etc\hosts
# Le pipeline (|) passe la sortie d'une cmdlet en entrée de la suivante # Lister les 10 processus les plus gourmands en RAM Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10 # Trouver tous les services arrêtés Get-Service | Where-Object {$_.Status -eq "Stopped"} # Exporter en CSV Get-Service | Export-Csv -Path C:\services.csv -NoTypeInformation # Filtrer les fichiers de plus de 100 Mo Get-ChildItem C:\ -Recurse -File | Where-Object {$_.Length -gt 100MB}
| Cmdlet | Action |
|---|---|
| Get-Service | Lister les services |
| Get-Service -Name ssh* | Chercher un service par nom |
| Start-Service nom | Démarrer un service |
| Stop-Service nom | Arrêter un service |
| Restart-Service nom | Redémarrer un service |
| Set-Service nom -StartupType Automatic | Configurer le démarrage auto |
| Get-Process | Lister les processus |
| Stop-Process -Name notepad | Tuer un processus par nom |
| Stop-Process -Id 1234 | Tuer un processus par PID |
# Importer le module AD (si pas chargé automatiquement) Import-Module ActiveDirectory # Lister tous les utilisateurs Get-ADUser -Filter * # Rechercher un utilisateur spécifique Get-ADUser -Identity adupont -Properties * # Lister les utilisateurs d'une UO Get-ADUser -Filter * -SearchBase "OU=Etudiants,DC=lycee,DC=local" # Créer un utilisateur New-ADUser -Name "Alice Dupont" ` -SamAccountName "adupont" ` -UserPrincipalName "adupont@lycee.local" ` -Path "OU=Etudiants,DC=lycee,DC=local" ` -AccountPassword (ConvertTo-SecureString "P@ssword123" -AsPlainText -Force) ` -Enabled $true # Désactiver un compte Disable-ADAccount -Identity adupont # Ajouter un utilisateur à un groupe Add-ADGroupMember -Identity "GRP-Etudiants" -Members adupont # Lister les membres d'un groupe Get-ADGroupMember -Identity "GRP-Etudiants" # Ordinateurs du domaine Get-ADComputer -Filter * | Select Name, OperatingSystem
# verification-serveur.ps1 # Variables $Serveur = "SRV-AD-01" $Services = @("ADWS", "DNS", "Netlogon", "W32Time") # Boucle ForEach foreach ($Service in $Services) { $Etat = Get-Service -Name $Service -ErrorAction SilentlyContinue if ($Etat.Status -eq "Running") { Write-Host "$Service : OK" -ForegroundColor Green } else { Write-Host "$Service : ARRETE" -ForegroundColor Red } } # Condition $Disque = Get-PSDrive C $PourcentUsed = [math]::Round(($Disque.Used / ($Disque.Used + $Disque.Free)) * 100) if ($PourcentUsed -gt 80) { Write-Warning "Disque C: à $PourcentUsed% !" }
✅ Réponse : Verbe-Nom (Get-Service)
✅ Réponse : Passe la sortie d'une cmdlet en entrée de la suivante
✅ Réponse : Les réponses A et B sont correctes
✅ Réponse : New-ADUser
✅ Réponse : .\script.ps1