Polarys
PowerShell pour l'administration/Automatisation et scripts

Automatisation et scripts

Variables, conditions et boucles

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 -gt et -lt. > en PowerShell = redirection de sortie.
  • Oublier le $ dans les variables : nom = "test" ne fait rien (ou erreur). $nom = "test" affecte la variable.
  • foreach vs ForEach-Object : foreach ($x in $liste) est une instruction de langage (plus rapide pour les grandes collections). ForEach-Object est 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 : foreach pour collections, for pour numériques, while pour conditions.
  • [PSCustomObject]@{} pour créer des objets structurés exportables en CSV.

Quiz de validation

Quiz - 2 questions

1. Quel opérateur utilise-t-on pour tester l'égalité en PowerShell ?

2. Quelle est la différence entre foreach et ForEach-Object ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.