Boucles en PowerShell
La boucle foreach en PowerShell
La boucle foreach permet d’itérer sur chaque élément d’une collection (tableau, liste, résultat de commande, etc.) en PowerShell.
Syntaxe de base
foreach ($element in $collection) {
# Instructions à exécuter pour chaque $element
}
$element: variable temporaire pour chaque item de la collection.$collection: tableau, liste ou résultat d’une commande.
Exemple simple
$fruits = @("pomme", "banane", "orange")
foreach ($fruit in $fruits) {
Write-Output "Fruit : $fruit"
}
Ici, la boucle itère sur chaque fruit du tableau $fruits et affiche son nom.
Utilisation avec des commandes
foreach ($fichier in Get-ChildItem) {
Write-Output $fichier.Name
}
Ici, le script utilise la cmdlet Get-ChildItem pour obtenir la liste des fichiers dans le répertoire courant. Cette cmdlet retourne une collection d'objets représentant les fichiers, et la boucle foreach itère sur chacun de ces objets pour afficher leur nom.
À l'intérieur de la boucle, la variable $fichier représente chaque objet fichier retourné par Get-ChildItem. Vous pouvez accéder à ses propriétés, comme $fichier.Name, pour afficher le nom du fichier.
Pour connaitre les propriétés disponibles pour chaque objet, vous pouvez utiliser la cmdlet Get-Member :
Get-ChildItem | Get-Member
Variante : ForEach-Object
Une variante de la boucle foreach est ForEach-Object, qui est utilisée dans les pipelines. Elle permet de traiter chaque objet d'une collection en passant par un pipeline.
Ainsi, l'exemple précédent pourrait être réécrit comme suit :
Get-ChildItem | ForEach-Object {
Write-Output $_.Name
}
Ici, $_ représente l'objet courant dans le pipeline. Cette syntaxe est souvent utilisée pour des opérations en chaîne, où chaque étape du pipeline traite les objets successifs.
La boucle for
La boucle for est utilisée pour répéter un bloc de code un nombre spécifique de fois, en utilisant une variable de contrôle.
Syntaxe de base
for ($i = 0; $i -lt 10; $i++) {
# Instructions à exécuter
}
$i = 0: initialisation de la variable de contrôle.$i -lt 10: condition de continuation (tant que$iest inférieur à 10).$i++: incrémentation de la variable de contrôle.
Exemple simple
for ($i = 0; $i -lt 5; $i++) {
Write-Output "Itération numéro : $i"
}
Ici, la boucle s'exécute 5 fois, affichant le numéro de chaque itération.
Exemple concret
$serveurs = @("server-1", "server-2", "server-3")
for ($i = 0; $i -lt $serveurs.Count; $i++) {
Write-Output "Ping de $($serveurs[$i])"
Test-Connection -ComputerName $serveurs[$i] -Count 1
}
Ici, la boucle for itère sur un tableau de serveurs et effectue un ping sur chacun d'eux en utilisant la cmdlet Test-Connection.
Boucle while
Introduction
La boucle while permet d'exécuter un bloc d'instructions tant qu'une condition est vraie. Elle est utile pour répéter des actions dont le nombre d'itérations n'est pas connu à l'avance.
Syntaxe
while (<condition>) {
# Instructions à répéter
}
<condition>: Expression évaluée avant chaque itération. Si elle est vraie ($true), le bloc s'exécute.
Exemple simple
$i = 1
while ($i -le 5) {
Write-Host "Valeur de i : $i"
$i++
}
Résultat :
Valeur de i : 1
Valeur de i : 2
Valeur de i : 3
Valeur de i : 4
Valeur de i : 5
Explications détaillées
- Avant chaque tour de boucle, PowerShell vérifie la condition.
- Si la condition est vraie, le bloc d'instructions s'exécute, puis la condition est vérifiée à nouveau.
- Si la condition est fausse, la boucle s'arrête et le programme continue après la boucle.
Exemple : Attendre une entrée utilisateur
$userInput = ""
while ($userInput -ne "exit") {
$userInput = Read-Host "Tapez 'exit' pour quitter"
Write-Host "Vous avez tapé : $userInput"
}
Explication :
- La boucle continue tant que l'utilisateur ne tape pas "exit".
Exemple : Compter les éléments d'un tableau
$fruits = @("Pomme", "Banane", "Orange")
$i = 0
while ($i -lt $fruits.Count) {
Write-Host "Fruit : $($fruits[$i])"
$i++
}
Points importants
- La condition est évaluée avant chaque itération.
- Si la condition est fausse dès le début, le bloc n'est jamais exécuté.
- Attention aux boucles infinies si la condition ne devient jamais fausse.
Exemple de boucle infinie
while ($true) {
Write-Host "Boucle infinie"
}
Astuce : Utilisez break pour sortir d'une boucle selon une condition interne.
while ($true) {
$input = Read-Host "Tapez 'stop' pour arrêter"
if ($input -eq "stop") {
break
}
}
Utilisation courante
- Répéter une action jusqu'à ce qu'une condition soit remplie.
- Attendre un événement ou une entrée utilisateur.
- Parcourir des données tant qu'il y a des éléments à traiter.
Comparaison avec do-while
while: teste la condition avant d'exécuter le bloc.do-while: exécute le bloc au moins une fois, puis teste la condition.
do {
# Instructions
} while (<condition>)
Exemple :
do {
$val = Read-Host "Entrez un nombre supérieur à 10"
} while ($val -le 10)
Bonnes pratiques
- Toujours prévoir une sortie de boucle.
- Utiliser des compteurs ou des conditions claires.
- Éviter les boucles infinies involontaires.
- Ajouter des commentaires pour expliquer la logique de la boucle.