Comment Utiliser les Boucles For, While et Autres Boucles en PowerShell

Dans cet article, nous passerons en revue les boucles For, While, Do-While et Do-Until de PowerShell. Je vais expliquer comment les boucles PowerShell sont construites et comment définir des conditions pour entrer ou sortir d’une boucle.

Boucle For de PowerShell

La boucle For est une boucle de comptage, principalement utilisée lorsque vous avez besoin de répéter une tâche un certain nombre de fois, de traiter une collection ou de spécifier des éléments par un numéro d’index. Elle se répète tant que la condition de test est évaluée à vrai et sort sur faux.

PowerShell For Loop

La syntaxe d’une boucle For est la suivante:

for (<Init>; <Condition>; <Repeat>) {

<Script Block>

}
  • Le bloc <Init> exécute une commande ou un ensemble de commandes avant que la boucle ne commence. Habituellement, c’est à cet endroit que vous initialisez la variable de comptage.
  • Dans la section <Condition>, vous évaluez le test conditionnel. S’il est vrai, vous entrez dans la boucle et exécutez les commandes du bloc de script. Ensuite, la condition est réévaluée jusqu’à ce qu’elle soit fausse.
  • La balise <Repeat> exécute une ou plusieurs commandes, séparées par des virgules à chaque itération de la boucle. Elle est généralement utilisée pour modifier la variable de comptage.

Si vous souhaitez répéter une opération spécifique cinq fois, utilisez l’exemple suivant:

Protection des données

Découvrez quelles données sensibles sont stockées où, évaluez les risques qui y sont associés et mettez en place des mesures de protection des données basées sur des politiques avec DataSecurity Plus, le logiciel de protection des données de ManageEngine. Commencez dès aujourd’hui avec un essai gratuit entièrement fonctionnel de 30 jours.

Learn More

for ($var = 1; $var -le 5; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
A PowerShell loop repeating the same operation five times

Ici, la variable est initialisée avec une valeur de 1, qui est inférieure à 5, donc vous entrez dans la boucle et exécutez le bloc de script. À chaque itération, la valeur de la variable est incrémentée de 1 et évaluée par rapport à la condition jusqu’à ce que le résultat soit faux.

Comme la condition est évaluée au début, si le résultat est faux, le bloc de commande ne sera pas exécuté :

for ($var = 6; $var -le 5; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
If the initial condition if false, the loop won’t be executed

Si nécessaire, vous pouvez utiliser des opérateurs logiques pour spécifier plus de conditions. Dans ce cas, nous avons ajouté plusieurs conditions. Et parce que l’opérateur logique -et ne renvoie vrai que lorsque les deux conditions sont vraies, la boucle s’arrête lorsque l’expression $var -ne 3 atteint un état faux.

for ($var = 1; $var -le 5 -and $var -ne 3; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
We added another condition to stop the script when the variable reaches a false state.

Comme mentionné précédemment, vous pouvez exécuter une ou plusieurs commandes dans les espaces réservés <Init> et <Repeat>. Dans l’exemple ci-dessous, nous avons une variable $var1 avec une valeur initiale de 1, qui s’incrémente, et sa valeur est évaluée pour vérifier si elle est inférieure ou égale à 5.

Cependant, nous avons également une deuxième variable, $var2. Elle a une valeur initiale de 5, qui est décrémentée mais n’est pas évaluée en tant que partie de la condition.

for (($var1 = 1), ($var2 = 5); $var1 -le 5; ($var1++), ($var2--)) {

Write-Host The value of Var1 is: $var1

Write-Host The value of Var2 is: $var2

}

Write-Host End of for loop.
Two different variables are being updated 

Comment définir les conditions de boucle PowerShell

En PowerShell, les commandes sont exécutées séquentiellement. Mais parfois, vous pouvez avoir besoin de répéter une commande ou un ensemble de commandes jusqu’à ce qu’une certaine condition soit remplie. Cela s’appelle une boucle.

Pour définir les conditions d’entrée ou de sortie d’une boucle en PowerShell, vous devez utiliser des opérateurs de comparaison. Ils vous permettront de comparer des valeurs ou de trouver une valeur qui correspond à un motif spécifique. Le résultat est une valeur Booléenne ( vrai ou faux), qui est évaluée par la logique de boucle.

Vous pouvez utiliser des opérateurs de comparaison pour comparer des valeurs numériques:

Operation Result
2 -eq 2 True
2 -eq 5 False
3 -gt 7 True
5 -lt 3 False

Vous pouvez également comparer des valeurs de chaîne avec des opérateurs de comparaison:

Protection des données

Sachez quelles données sensibles sont stockées où, évaluez les risques associés et mettez en œuvre des mesures de protection des données basées sur des politiques avec DataSecurity Plus, le logiciel de protection des données de ManageEngine. Commencez dès aujourd’hui avec un essai gratuit et entièrement fonctionnel de 30 jours.

Learn More

Operation Result
‘PowerShell’ -eq ‘powershell’ True
‘PowerShell’ -eq ‘cmd’ False
‘PowerShell’ -like ‘power*’ True
‘PowerShell’ -notlike ‘*shell’ False

Boucle Foreach PowerShell

La boucle Foreach est utilisée pour itérer à travers les éléments d’une collection. Dans ce scénario, vous n’avez pas de condition à évaluer, mais la boucle se répète jusqu’à ce que tous les éléments de la collection aient été traités.

<Figure Foreach_Diagram.png>

The syntax for a Foreach loop is the following:

foreach ($<item> in $<collection) {

<Script Block>

}

Ici, nous commençons par l’instruction foreach, suivie de crochets avec une variable et une collection à itérer. Ensuite vient le bloc de script à exécuter. La variable est créée automatiquement et elle reçoit une valeur du tableau avant chaque exécution de la boucle.

Encore une fois, pour exécuter la boucle cinq fois, vous aurez besoin d’une collection avec cinq éléments. Dans ce cas, ce seront les valeurs entières de 1 à 5:

$collection = 1..5

foreach ($item in $collection) {

Write-Host The value of Item is: $item

}

Write-Host End of foreach loop
We ran a PowerShell ForEach loop with a collection of five items.

La variable est initialisée avec la première valeur de la collection, qui est 1, puis le bloc de script est exécuté. À la prochaine itération, la variable reçoit la valeur suivante du tableau, qui est 2. Le bloc de script sera traité encore et encore jusqu’à ce que tous les éléments de la collection soient traités.

Par exemple, si vous souhaitez traiter les cinq premiers services fonctionnant sur votre ordinateur, votre boucle ressemblerait à ceci:

foreach ($service in (Get-Service | Select-Object -First 5)) {

Write-Host Service name is: $service.name and status is $service.status

}
This script shows the first five services working on our computer

Vous devez comprendre qu’il y a une différence entre la boucle Foreach et l’instruction Foreach-Object. Il est facile de les confondre. Une boucle Foreach commence toujours par une instruction Foreach, alors que la commande Foreach-Object suivra une commande avec un pipeline car elle traite les objets envoyés à travers elle.

Boucle While de PowerShell

La déclaration While en PowerShell est utilisée pour créer une boucle qui exécute une commande ou un ensemble de commandes si la condition est évaluée à true. Elle vérifie la condition avant d’exécuter le bloc de script. Tant que la condition est true, PowerShell exécutera le bloc de script jusqu’à ce que la condition donne false.

Diagram showing how a PowerShell While loop works

La syntaxe d’une boucle while est la suivante :

while (<Condition>){<Script Block>}

Par exemple, si vous avez une variable nommée var avec une valeur initiale de 1 et que vous souhaitez répéter la boucle cinq fois, la boucle doit suivre cette structure :

Protection des données

Identifiez où sont stockées les données sensibles, évaluez les risques associés et mettez en œuvre des mesures de protection des données basées sur des politiques avec DataSecurity Plus, le logiciel de protection des données de ManageEngine. Commencez dès aujourd’hui avec un essai gratuit entièrement fonctionnel de 30 jours.

Learn More

$var = 1

while ($var -le 5)

{

Write-Host The value of Var is: $var

$var++

}

Write-Host End of While loop.
Example of a loop running five times

Dans l’exemple ci-dessus, la variable est initialisée en dehors de la boucle et incrémentée dans le bloc de script. La commande Write-Host est utilisée pour afficher la valeur de la variable à chaque cycle de la boucle.

Il est important de noter que si la condition est initialement false, alors la boucle ne sera pas déclenchée. Dans notre exemple, si nous avions une valeur pour la variable (var = 6), alors la commande de boucle n’aurait pas du tout fonctionné et le bloc de script n’aurait pas été exécuté.

$var = 6

while ($var -le 5)

{

Write-Host The value of Var is: $var

$var++

}

Write-Host End of While loop.
The result of the loop if the initial condition is false

Vous pouvez utiliser des conditions plus complexes en utilisant des opérateurs logiques. Par exemple, si vous souhaitez que la variable soit inférieure à 5 et différente de 3, la boucle ressemblerait à ceci:

$var = 1

while ($var -le 5 -and $var -ne 3)

{

Write-Host The value of Var is: $var

$var++

}

Write-Host End of While loop.
Running the loop with a variable we want to be less than 5 and not equal to 3

Comme mentionné précédemment, lors de l’utilisation de l’opérateur logique -et, le résultat est true uniquement lorsque les deux tests conditionnels évaluent à true. Dans ce cas, lorsque la variable se voit attribuer la valeur 3, la deuxième condition devient false: Cela conduit à un résultat false, arrêtant la boucle.

Boucle Do-While PowerShell

A Do-While loop is a variant of the While loop, and the main difference is that the script block is executed before the condition is checked. This means that even if the start condition is false, the script block will be executed at least once.

Diagram showing how a PowerShell Do-While loop works

La syntaxe d’une boucle Do-While est la suivante:

do {

<script block>

} while (<condition>)

Donc, si nous utilisons le même exemple qu’auparavant, le code ressemblerait à ceci:

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} while ($var -le 5)

Write-Host End of Do-While loop.
Running a Do-While loop

Exécutons une boucle Do-While avec une valeur pour la variable var = 6. Ici, la boucle sera quand même exécutée une fois avant de vérifier que la condition était false.

$var = 6

do {

Write-Host The value of Var is: $var

$var++

} while ($var -le 5)

Write-Host End of Do-While loop.
The script was still executed even though the initial condition was false.

Encore une fois, l’utilisation d’opérateurs logiques est également possible. Si nous utilisons le même exemple qu’auparavant, vous verrez que la boucle s’arrête lorsque la valeur de la variable est 3 car nous voulions que notre variable soit inférieure à 5 et différente de 3:

Protection des données

Découvrez quelles données sensibles sont stockées où, évaluez les risques associés, et mettez en place des mesures de protection des données basées sur des politiques avec DataSecurity Plus, le logiciel de protection des données de ManageEngine. Commencez dès aujourd’hui avec une version d’essai entièrement fonctionnelle de 30 jours.

Learn More

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} while ($var -le 5 -and $var -ne 3)

Write-Host End of Do-While loop.
The script stops because we wanted our variable to be less than 5 and not equal to 3

Boucle Do-Until PowerShell

La boucle Do-Until fonctionne de la même manière que la boucle Do-While : elle exécute d’abord le bloc de script puis évalue la condition. La différence ici est que tandis que la boucle Do-While entre dans la boucle avec une condition vraie, la boucle Do-Until recherche une condition fausse pour entrer dans la boucle.

Diagram showing how a PowerShell Do-Until loop works

La syntaxe d’une boucle Do-Until est la suivante :

do {

<script block>

} until (<condition>)

Comme vous le voyez, la structure ressemble presque identiquement à une boucle Do-While. Cependant, voyons ce que serait le résultat si nous continuions d’utiliser notre exemple précédent :

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} until ($var -le 5)

Write-Host End of Do-Until loop.
The Do-Until loop is not triggered as it needs an initial false result

Comme le test conditionnel évalue à vrai, la boucle Do-Until n’est pas déclenchée car nous avons besoin d’un résultat faux pour entrer dans la boucle. Dans ce cas, si vous souhaitez répéter la boucle 5 fois, l’opérateur logique doit être modifié en supérieur à (-gt), ce qui fournira un résultat faux pour les 5 premières itérations :

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} until ($var -gt 5)

Write-Host End of Do-Until loop.
Changing the logical operator to ‘greater than’ provides us a false result for the first iterations of the loop

Encore une fois, comme nous avons besoin que la condition initiale soit fausse pour entrer et rester dans la boucle, cela affecterait également les opérateurs logiques si nous devions définir une expression plus complexe.

Dans l’exemple suivant, nous devons utiliser l’opérateur ou pour que la boucle se répète jusqu’à ce que notre variable soit supérieure à 5 (résultat faux requis) ou égale à 3. Nous ne pouvions pas utiliser l’opérateur et, qui aurait nécessité que la variable soit à la fois supérieure à 5 et égale à 3 en même temps car cela aurait entraîné une boucle infinie.

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} until ($var -gt 5 -or $var -eq 3)

Write-Host End of Do-Until loop.
We use the -or operator to have the Do-Until loop repeat until our variable is greater than 5 or equal to 3

Comment contrôler les boucles PowerShell

Vous pouvez contrôler le déroulement de l’exécution dans une boucle en utilisant des mots-clés pour soit quitter la boucle sans évaluer la condition, soit passer à l’itération suivante de la boucle. Bien que ces mots-clés puissent parfois être utiles, ils ne sont pas toujours recommandés car ils peuvent rendre le script plus difficile à lire.

L’instruction break

L’instruction break arrête et quitte immédiatement la boucle en cours sans exécuter le reste du code dans le bloc de script de la boucle, et sans évaluer la condition spécifiée. Cela permet à PowerShell de continuer à exécuter le reste du code.

Le mot-clé break se comporte de la même manière quel que soit le type de boucle utilisé. En reprenant l’un des exemples ci-dessus, nous compterons de 1 à 5 et sortirons de la boucle si la variable de comptage est égale à trois. Mais cette fois, nous ajouterons un break au lieu d’utiliser des opérateurs logiques dans la condition de test.

Protection des données

Identifiez quelles données sensibles sont stockées où, évaluez les risques qui y sont associés et mettez en œuvre des mesures de protection des données basées sur des politiques avec DataSecurity Plus, le logiciel de protection des données de ManageEngine. Commencez dès aujourd’hui avec un essai gratuit entièrement fonctionnel de 30 jours.

Learn More

Pour ce faire, l’instruction if sera utilisée pour définir les critères de sortie.

For ($var = 1; $var -le 5; $var++) {

if ($var -eq 3) {break}

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
We’ve used a break statement instead of using logical operators to stop the script

Lorsque la valeur de la variable de comptage est égale à 3, l’instruction if est déclenchée et le mot-clé break est exécuté. Comme le mot-clé break est placé avant la commande Write-Host dans le bloc de script, cette dernière ne sera pas traitée. La boucle s’arrête et le script continue d’exécuter le code restant.

L’instruction continue

L’instruction continue vous permet de sauter la partie restante du code, vous ramenant au début de la boucle sans la quitter.

Comme dans l’exemple précédent, une boucle For sera utilisée, mais cette fois au lieu d’exiter la boucle lorsque la variable de comptage atteint 3, PowerShell sautera le reste du code pour l’itération actuelle et procédera avec la boucle jusqu’à ce que le test conditionnel soit faux.

for ($var = 1; $var -le 5; $var++) {

if ($var -eq 3) {Continue}

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
The if statement is triggered when the value of the variable is equal to 3

Comme vous avez pu le remarquer, lorsque la valeur de la variable est égale à 3, l’instruction if est déclenchée, exécutant l’instruction continue. Elle saute alors le reste du code à l’intérieur de la boucle sans la rompre.

Conclusion

PowerShell prend en charge divers types de boucles, et il est vraiment important de comprendre comment elles peuvent vous aider à simplifier vos scripts et à répéter certaines actions de manière cohérente. Nous avons couvert intensivement des astuces et des conseils PowerShell sur Petri, alors assurez-vous de consulter nos autres guides sur la façon de écrire des scripts PowerShell et sur la façon d’utiliser l’option ForEach en parallèle.

Article connexe:

Source:
https://petri.com/how-to-use-powershell-for-while-loops/