Aide-mémoire PowerShell
| Bases et Concepts |
| Objectif | Commande |
| Aide sur une commande |
Get-Help Get-Process Get-Help Get-Process -Examples Get-Help Get-Process -Full Update-Help :: mettre à jour l'aide |
| Découvrir les cmdlets |
Get-Command Get-Command -Verb Get Get-Command -Noun Process Get-Command *network* Get-Alias ls :: voir l'alias d'une commande |
| Membres d'un objet |
Get-Process | Get-Member Get-Process | Get-Member -MemberType Property "bonjour" | Get-Member |
| Version et profil |
$PSVersionTable $PROFILE :: chemin du profil notepad $PROFILE :: éditer le profil . $PROFILE :: recharger le profil |
| Politique d'exécution |
Get-ExecutionPolicy Set-ExecutionPolicy RemoteSigned -Scope CurrentUser Set-ExecutionPolicy Bypass -Scope Process :: temporaire |
| Variables et Types |
| Déclarer et utiliser |
$nom = "Jean" $age = 42 $prix = 3.14 $actif = $true $vide = $null Write-Host "Bonjour $nom, tu as $age ans" |
| Typage explicite |
[string]$nom = "Jean" [int]$age = 42 [double]$prix = 3.14 [bool]$actif = $true [datetime]$date = "2026-01-01" [array]$tab = @(1,2,3) [hashtable]$dico = @{} |
| Variables automatiques utiles |
$_ :: objet courant dans le pipeline $? :: succès de la dernière commande ($true/$false) $LASTEXITCODE :: code retour du dernier programme externe $Error[0] :: dernière erreur $PSScriptRoot :: dossier du script en cours $args :: arguments du script $env:PATH :: variable d'environnement |
| Portée (Scope) |
$global:maVar = "globale" $script:maVar = "script" $local:maVar :: portée locale (par défaut) |
| Chaînes de Caractères |
| Déclaration |
"double guillemets - interpolation : $nom" 'simple guillemets - littéral : $nom' @" Ici-doc multiligne avec $interpolation "@ @' Ici-doc littéral '@ |
| Méthodes courantes |
$s = "Bonjour Monde" $s.Length :: 13 $s.ToUpper() :: BONJOUR MONDE $s.ToLower() :: bonjour monde $s.Trim() :: supprimer espaces $s.Replace("Monde","World") $s.Split(" ") :: tableau de mots $s.Contains("Bon") :: $true $s.StartsWith("Bon") $s.EndsWith("nde") $s.IndexOf("Monde") :: 8 $s.Substring(0, 7) :: Bonjour |
| Formatage |
"Prix : {0:N2} €" -f 1234.5 :: Prix : 1 234,50 € "{0:D}" -f (Get-Date) :: date longue "{0:yyyy-MM-dd}" -f (Get-Date) $s.PadLeft(10) :: aligner à droite $s.PadRight(10, '-') :: rembourrer |
| Tableaux et Hashtables |
| Tableaux |
$t = @(1, 2, 3, 4) $t = 1..10 :: plage 1 à 10 $t[0] :: premier élément $t[-1] :: dernier élément $t.Count :: nombre d'éléments $t += 5 :: ajouter un élément $t -contains 3 :: $true $t | Sort-Object $t | Sort-Object -Descending $t | Where-Object { $_ -gt 5 } $t | ForEach-Object { $_ * 2 } $t | Measure-Object -Sum -Average -Min -Max |
| Tableaux génériques (ArrayList) |
$list = [System.Collections.Generic.List[string]]::new() $list.Add("un") $list.Add("deux") $list.Remove("un") $list.Count |
| Hashtables |
$h = @{ nom = "Jean"; age = 42 } $h["nom"] :: Jean $h.nom :: Jean $h["ville"] = "Paris" :: ajouter $h.Remove("age") :: supprimer $h.ContainsKey("nom") :: $true $h.Keys :: toutes les clés $h.Values :: toutes les valeurs
:: Ordonné $h = [ordered]@{ a=1; b=2; c=3 } |
| Conditions et Comparaisons |
| Opérateurs de comparaison |
-eq :: égal -ne :: différent -gt :: plus grand -ge :: plus grand ou égal -lt :: plus petit -le :: plus petit ou égal -like "A*" :: wildcard -notlike -match "regex" :: regex -notmatch -contains :: tableau contient valeur -in :: valeur dans tableau -and -or -not -xor |
| If / ElseIf / Else |
if ($age -ge 18) { Write-Host "Majeur" } elseif ($age -ge 16) { Write-Host "Presque" } else { Write-Host "Mineur" } |
| Switch |
switch ($jour) { "Lundi" { Write-Host "Début semaine" } "Samedi" { Write-Host "Weekend" } "Dimanche" { Write-Host "Weekend" } default { Write-Host "Semaine" } }
switch -Wildcard ($fichier) { "*.log" { "journal" } "*.txt" { "texte" } } |
| Opérateur ternaire (PS 7+) |
$result = $age -ge 18 ? "Majeur" : "Mineur" |
| Boucles |
| ForEach-Object (pipeline) |
Get-Process | ForEach-Object { Write-Host $_.Name } Get-Process | ForEach-Object { $_.Name } :: raccourci 1..5 | ForEach-Object { $_ * 2 } |
| foreach (rapide sur collections) |
foreach ($item in $tableau) { Write-Host $item }
foreach ($key in $hash.Keys) { Write-Host "$key = $($hash[$key])" } |
| for |
for ($i = 0; $i -lt 10; $i++) { Write-Host $i } |
| while / do-while |
while ($i -lt 5) { $i++; Write-Host $i }
do { $i++ } while ($i -lt 5)
do { $i++ } until ($i -ge 5) :: until = tant que condition fausse |
| Contrôle de flux |
break :: sortir de la boucle continue :: passer à l'itération suivante return :: sortir de la fonction exit 0 :: quitter le script |
| Fonctions |
| Fonction simple |
function Dire-Bonjour { param($nom) Write-Host "Bonjour $nom" } Dire-Bonjour -nom "Jean" |
| Paramètres avancés |
function Get-Info { [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string]$Nom,
[Parameter()][int]$Age = 0,
[switch]$Verbose ) if ($Verbose) { Write-Host "Mode verbose" } return "$Nom a $Age ans" } |
| Pipeline input |
function Doubler { param([Parameter(ValueFromPipeline=$true)]$val) process { $val * 2 } } 1..5 | Doubler |
| Pipeline et Filtrage |
| Where-Object |
Get-Process | Where-Object { $_.CPU -gt 100 } Get-Process | Where-Object Name -like "chrome*" Get-Service | Where-Object Status -eq "Running" |
| Select-Object |
Get-Process | Select-Object Name, CPU, Id Get-Process | Select-Object -First 5 Get-Process | Select-Object -Last 5 Get-Process | Select-Object -Unique Name Get-Process | Select-Object Name,@{n='CPU(s)';e={$_.CPU}} |
| Sort-Object / Group-Object |
Get-Process | Sort-Object CPU -Descending Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Get-Process | Group-Object Name |
| Mesures |
Get-Process | Measure-Object CPU -Sum -Average -Min -Max (Get-ChildItem -Recurse | Measure-Object Length -Sum).Sum / 1MB |
| Tee-Object |
Get-Process | Tee-Object -FilePath procs.txt | Where-Object CPU -gt 100 |
| Fichiers et Dossiers |
| Navigation |
Get-Location :: pwd Set-Location C:\temp :: cd Push-Location C:\temp Pop-Location |
| Lister |
Get-ChildItem :: ls / dir Get-ChildItem -Recurse Get-ChildItem *.log Get-ChildItem -Filter "*.txt" -Recurse Get-ChildItem -Hidden Get-ChildItem | Sort-Object LastWriteTime -Descending |
| Lire / écrire |
Get-Content fichier.txt Get-Content fichier.txt | Select-String "erreur" Set-Content fichier.txt "contenu" :: écraser Add-Content fichier.txt "nouvelle ligne" :: ajouter $data = Get-Content fichier.txt -Raw :: texte brut
:: Écrire de l'UTF-8 Set-Content fichier.txt "texte" -Encoding UTF8 |
| Copier / déplacer / supprimer |
Copy-Item source dest Copy-Item C:\src C:\dst -Recurse Move-Item source dest Remove-Item fichier.txt Remove-Item dossier -Recurse -Force New-Item -ItemType File -Name "test.txt" New-Item -ItemType Directory -Name "mondossier" |
| Test d'existence |
Test-Path fichier.txt :: $true/$false Test-Path C:\dossier -PathType Container Test-Path C:\fichier -PathType Leaf |
| Propriétés d'un fichier |
$f = Get-Item fichier.txt $f.Name $f.FullName $f.Length :: taille en octets $f.LastWriteTime $f.Extension $f.BaseName :: sans extension |
| JSON et CSV |
# JSON $data = Get-Content data.json | ConvertFrom-Json $data | ConvertTo-Json | Set-Content out.json $data | ConvertTo-Json -Depth 5
# CSV Import-Csv data.csv Import-Csv data.csv -Delimiter ";" Get-Process | Export-Csv procs.csv -NoTypeInformation Get-Process | Export-Csv procs.csv -Delimiter ";" -Encoding UTF8 |
| Chemins |
Join-Path "C:\dossier" "fichier.txt" Split-Path "C:\dossier\fichier.txt" -Leaf :: fichier.txt Split-Path "C:\dossier\fichier.txt" -Parent :: C:\dossier [System.IO.Path]::GetExtension("f.txt") :: .txt [System.IO.Path]::GetTempPath() |
| Processus et Services |
| Processus |
Get-Process Get-Process chrome Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Stop-Process -Name notepad Stop-Process -Id 1234 -Force Start-Process notepad Start-Process "C:\prog.exe" -ArgumentList "/arg1","/arg2" Start-Process cmd -Verb RunAs :: élever en admin Wait-Process -Name "setup" -Timeout 60 |
| Services |
Get-Service Get-Service wuauserv Get-Service | Where-Object Status -eq "Running" Start-Service wuauserv Stop-Service wuauserv Restart-Service wuauserv Set-Service -Name wuauserv -StartupType Automatic |
| Réseau |
| Informations réseau |
Get-NetIPAddress Get-NetIPAddress -AddressFamily IPv4 Get-NetAdapter Get-NetAdapter | Where-Object Status -eq "Up" Get-DnsClientServerAddress Resolve-DnsName google.com |
| Connectivité |
Test-Connection google.com Test-Connection google.com -Count 4 Test-NetConnection google.com -Port 443 Test-NetConnection 192.168.1.1 -Port 22 :: tester un port |
| Web / HTTP |
Invoke-WebRequest "https://api.exemple.com" $r = Invoke-WebRequest "https://api.exemple.com" $r.StatusCode $r.Content
# API REST JSON $r = Invoke-RestMethod "https://api.exemple.com/users" $r | Select-Object name, email
# POST JSON $body = @{ nom = "Jean" } | ConvertTo-Json Invoke-RestMethod "https://api/users" -Method POST -Body $body -ContentType "application/json"
# Télécharger un fichier Invoke-WebRequest "https://url/fichier.zip" -OutFile "C:\fichier.zip" |
| Registre Windows |
| Navigation dans le registre |
Get-ChildItem HKLM:\SOFTWARE\Microsoft Get-Item "HKCU:\Software\monapp" Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" |
| Lire / écrire |
Get-ItemPropertyValue "HKCU:\Software\monapp" -Name "MaCle"
New-Item "HKCU:\Software\monapp" -Force Set-ItemProperty "HKCU:\Software\monapp" -Name "MaCle" -Value "valeur" New-ItemProperty "HKCU:\Software\monapp" -Name "Num" -Value 1 -PropertyType DWORD
Remove-ItemProperty "HKCU:\Software\monapp" -Name "MaCle" Remove-Item "HKCU:\Software\monapp" -Recurse |
| Remoting et Jobs |
| Session distante |
Enter-PSSession -ComputerName serveur Enter-PSSession -ComputerName serveur -Credential dom\user Exit-PSSession
Invoke-Command -ComputerName serveur -ScriptBlock { Get-Service } Invoke-Command -ComputerName srv1,srv2 -ScriptBlock { hostname } |
| Jobs en arrière-plan |
$job = Start-Job { Start-Sleep 10; "terminé" } Get-Job Wait-Job $job Receive-Job $job Remove-Job $job
# Parallel (PS 7+) 1..10 | ForEach-Object -Parallel { $_ * 2 } -ThrottleLimit 5 |
| Gestion des Erreurs |
| Try / Catch / Finally |
try { Get-Item "C:\inexistant" -ErrorAction Stop } catch [System.IO.FileNotFoundException] { Write-Warning "Fichier non trouvé" } catch { Write-Error "Erreur : $_" } finally { Write-Host "Terminé" } |
| ErrorAction |
$ErrorActionPreference = "Stop" :: globalement Get-Item "C:\nx" -ErrorAction Stop :: cette commande Get-Item "C:\nx" -ErrorAction SilentlyContinue :: ignorer Get-Item "C:\nx" -ErrorAction Continue :: continuer (défaut) |
| Write-* (sortie) |
Write-Host "Affichage console (sans pipeline)" Write-Output "Dans le pipeline" Write-Warning "Avertissement" Write-Error "Erreur" Write-Verbose "Détail" :: visible avec -Verbose Write-Debug "Debug" :: visible avec -Debug Write-Progress -Activity "Traitement" -PercentComplete 50 |
| Modules |
| Gestion des modules |
Get-Module Get-Module -ListAvailable Import-Module ActiveDirectory Remove-Module ActiveDirectory
Find-Module PowerShellGet :: chercher sur PSGallery Install-Module Pester :: installer (admin requis) Update-Module Pester Uninstall-Module Pester |
| Modules utiles |
ActiveDirectory :: gestion AD DnsClient :: DNS NetTCPIP :: réseau Windows SqlServer :: SQL Server Az :: Azure Pester :: tests unitaires PSWindowsUpdate :: Windows Update |