Variables, conditions et boucles
Les scripts PowerShell deviennent utiles dès que l'on dépasse le simple one-liner. Variables, conditions et boucles sont les briques fondamentales de tout script d'automatisation.
Variables
# Déclaration (le $ est obligatoire)
$nom = "Polarys"
$age = 42
$liste = @("alpha", "beta", "gamma")
$hashtable = @{ Nom = "Martin"; Prenom = "Jean" }
# Affichage
Write-Host "Bonjour $nom"
Write-Host "Bonjour $($hashtable.Prenom) $($hashtable.Nom)" # interpolation d'expression
# Typage explicite
[int]$port = 8080
[string]$ip = "192.168.1.1"
[datetime]$debut = "2026-01-01"
Conditions
$espace = (Get-PSDrive C).Free / 1GB
if ($espace -lt 5) {
Write-Warning "Espace critique : $([math]::Round($espace, 2)) Go restants"
} elseif ($espace -lt 20) {
Write-Host "Espace faible : $([math]::Round($espace, 2)) Go" -ForegroundColor Yellow
} else {
Write-Host "Espace OK : $([math]::Round($espace, 2)) Go" -ForegroundColor Green
}
# Opérateurs de comparaison PowerShell
# -eq -ne -gt -ge -lt -le (nombres)
# -like -notlike (wildcards *)
# -match -notmatch (regex)
# -and -or -not
Boucles
# foreach : itérer sur une collection
$serveurs = @("SRV-DC01", "SRV-FILE01", "SRV-WEB01")
foreach ($serveur in $serveurs) {
$ping = Test-Connection -ComputerName $serveur -Count 1 -Quiet
Write-Host "$serveur : $(if ($ping) { 'UP' } else { 'DOWN' })"
}
# for : boucle numérique
for ($i = 1; $i -le 5; $i++) {
Write-Host "Itération $i"
}
# while : boucle conditionnelle
$tentatives = 0
while ($tentatives -lt 3) {
$tentatives++
Write-Host "Tentative $tentatives..."
Start-Sleep -Seconds 1
}
# ForEach-Object : dans le pipeline
1..10 | ForEach-Object { $_ * 2 }
Cas concret : vérification multi-serveurs
$serveurs = Import-Csv -Path C:\Infra\serveurs.csv # colonnes : Nom, IP, Role
$rapport = foreach ($srv in $serveurs) {
$ping = Test-Connection -ComputerName $srv.IP -Count 1 -Quiet
[PSCustomObject]@{
Nom = $srv.Nom
Role = $srv.Role
Status = if ($ping) { "UP" } else { "DOWN" }
Horodatage = Get-Date -Format "yyyy-MM-dd HH:mm"
}
}
$rapport | Format-Table -AutoSize
$rapport | Export-Csv -Path C:\Rapports\etat-serveurs.csv -NoTypeInformation
Erreurs fréquentes
- Opérateurs de comparaison : en PowerShell,
==n'existe pas : c'est-eq.>et<n'existent pas : c'est-gtet-lt.>en PowerShell = redirection de sortie. - Oublier le
$dans les variables :nom = "test"ne fait rien (ou erreur).$nom = "test"affecte la variable. foreachvsForEach-Object:foreach ($x in $liste)est une instruction de langage (plus rapide pour les grandes collections).ForEach-Objectest une cmdlet pipeline (pratique en one-liner).
À retenir
- Variables :
$obligatoire, typage optionnel ([int],[string]...). - Opérateurs :
-eq -ne -gt -lt -like -match -and -or. - Boucles :
foreachpour collections,forpour numériques,whilepour conditions. [PSCustomObject]@{}pour créer des objets structurés exportables en CSV.