5. Bouclez sur vos données
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
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"
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"
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"