5. Bouclez sur vos données

Répéter une action, traiter une collection, automatiser.
Aide

Commandes utiles pour résoudre les exercices

Les boucles deviennent simples si vous maîtrisez : saisie, tests, et collection (tableau).

Entrées / sorties

  • Read-Host Demande une saisie utilisateur (texte). Exemple : $x = Read-Host "Valeur"
  • Write-Output Affiche/renvoie un message. Exemple : Write-Output "OK"

Collections et compteurs

  • @() Crée un tableau. Exemple : $names = @("A","B")
  • .Count Nombre d’éléments. Exemple : $names.Count
  • $i++ Incrémenter un compteur. Exemple : $i++
  • % Modulo (reste). Exemple : ($n % 2) -eq 0
  • [int] Convertir texte en nombre : [int](Read-Host "Nombre")

Aide

  • Get-Help Voir syntaxe et exemples. Exemple : Get-Help about_ForEach
while

Description

while répète un bloc de code tant qu’une condition est vraie. C’est utile quand on ne sait pas à l’avance combien de fois on va répéter (ex : redemander une saisie).

Exemple simple (compteur)


$i = 1
while ($i -le 3) {
  Write-Output "Tour $i"
  $i++
}
      

Explication des commandes utilisées

  • $i = 1 : initialise le compteur.
  • while ($i -le 3) : exécute la boucle tant que $i ≤ 3.
  • Write-Output : affiche le message.
  • $i++ : augmente $i de 1 à chaque tour (sinon boucle infinie).

Exercices while (4)

Corrigés masqués : cherchez d’abord.

WHILE 1 — Mot de passe

Redemander le mot de passe tant que la saisie n’est pas admin.

Voir un corrigé possible

$pwd = ""
while ($pwd -ne "admin") {
  $pwd = Read-Host "Mot de passe (admin)"
}
Write-Output "OK"
            

WHILE 2 — Compter jusqu’à N

Demander un nombre N et afficher de 1 à N.

Voir un corrigé possible

$n = [int](Read-Host "N")
$i = 1
while ($i -le $n) {
  Write-Output $i
  $i++
}
            

WHILE 3 — Somme d’entrées

Demander des nombres et s’arrêter quand l’utilisateur tape 0. Afficher la somme.

Voir un corrigé possible

$sum = 0
$val = 1
while ($val -ne 0) {
  $val = [int](Read-Host "Nombre (0 pour arrêter)")
  $sum += $val
}
Write-Output "Somme = $sum"
            

WHILE 4 — Saisie non vide

Redemander un texte tant qu’il est vide, puis afficher “Merci”.

Voir un corrigé possible

$text = ""
while ([string]::IsNullOrWhiteSpace($text)) {
  $text = Read-Host "Entrez un texte non vide"
}
Write-Output "Merci"
            
for

Description

for est une boucle à compteur (initialisation, condition, incrément). Utile quand on connaît le nombre de répétitions ou quand on parcourt des index.

Exemple simple (0 à 2)


for ($i = 0; $i -lt 3; $i++) {
  Write-Output "i = $i"
}
      

Explication des commandes utilisées

  • $i = 0 : compteur au départ.
  • $i -lt 3 : condition (strictement inférieur à 3).
  • $i++ : incrément à chaque tour.
  • Write-Output : affiche le contenu.

Exercices for (4)

Corrigés masqués : cherchez d’abord.

FOR 1 — Afficher 1..10

Afficher les nombres de 1 à 10.

Voir un corrigé possible

for ($i=1; $i -le 10; $i++) {
  Write-Output $i
}
            

FOR 2 — Table de multiplication

Demander un nombre N et afficher N×1 à N×10.

Voir un corrigé possible

$n = [int](Read-Host "N")
for ($i=1; $i -le 10; $i++) {
  Write-Output "$n x $i = $($n*$i)"
}
            

FOR 3 — Compter les pairs

Entre 1 et 20, afficher uniquement les nombres pairs.

Voir un corrigé possible

for ($i=1; $i -le 20; $i++) {
  if (($i % 2) -eq 0) { Write-Output $i }
}
            

FOR 4 — Somme 1..N

Demander N et calculer la somme de 1 à N.

Voir un corrigé possible

$n = [int](Read-Host "N")
$sum = 0
for ($i=1; $i -le $n; $i++) {
  $sum += $i
}
Write-Output "Somme = $sum"
            
foreach

Description

foreach parcourt une collection (tableau ou liste d’objets). C’est la boucle la plus fréquente en administration (services, fichiers, utilisateurs…).

Exemple simple (liste de noms)


$names = @("Alice","Benoit","Chloé")
foreach ($n in $names) {
  Write-Output "Bonjour $n"
}
      

Explication des commandes utilisées

  • @("...") : crée un tableau (liste) de valeurs.
  • foreach ($n in $names) : prend un élément à la fois (stocké dans $n).
  • Write-Output : affiche un message pour chaque élément.

Exercices foreach (4)

Corrigés masqués : cherchez d’abord.

FOREACH 1 — Liste de services

Créer un tableau de services (ex: W32Time, WinRM) et afficher leur statut.

Voir un corrigé possible

$serviceNames = @("W32Time","WinRM")
foreach ($s in $serviceNames) {
  $svc = Get-Service -Name $s -ErrorAction SilentlyContinue
  if ($null -eq $svc) {
    Write-Output "$s : introuvable"
  } else {
    Write-Output "$s : $($svc.Status)"
  }
}
            

FOREACH 2 — Fichiers/dossiers

Créer un tableau de chemins et afficher “Présent/Absent” (Test-Path).

Voir un corrigé possible

$paths = @("C:\Temp","C:\tssr-powershell","C:\inexistant")
foreach ($p in $paths) {
  if (Test-Path $p) { "$p : Présent" } else { "$p : Absent" }
}
            

FOREACH 3 — Lire un fichier

Lire un fichier texte (Get-Content) et afficher chaque ligne avec un compteur.

Voir un corrigé possible

$file = Read-Host "Chemin du fichier"
$i = 1
foreach ($line in (Get-Content $file)) {
  Write-Output "$i - $line"
  $i++
}
            

FOREACH 4 — Compter une condition

Sur une liste de nombres, compter combien sont pairs.

Voir un corrigé possible

$nums = @(1,2,3,4,5,6,7,8,9,10)
$count = 0
foreach ($n in $nums) {
  if (($n % 2) -eq 0) { $count++ }
}
Write-Output "Pairs = $count"
            
Suite logique : la leçon suivante applique boucles + logique à des actions de masse (fichiers/services) et produit un rapport.
Quiz

Auto-évaluation — Boucles

Q1 — while exécute une boucle :

Q2 — for est souvent utilisé pour :

Q3 — foreach sert à :

Q4 — Dans une boucle, $i++ sert à :

Aller au chapitre suivant