Académique Documents
Professionnel Documents
Culture Documents
I. Présentation
La boucle "For" est un grand classique des différents langages de Scripting et de
programmation. Dans cet article, je vous propose de vous familiariser avec les boucles
"For" en PowerShell.
L'objectif d'une boucle "For" est d'exécuter X fois un bloc d'instructions, où le nombre
d'exécution de l'état de la condition testée.
Note : Affecter la valeur "0..10" à une variable sert à créer un tableau de valeurs, de 0 à 10.
Ce qui donne :
$valeur = 0..10
$valeur = 0..10
$langages = @("PowerShell","Python","PHP","JavaScript","C-Sharp")
Si l'on veut que ça continue jusqu'à la fin de $i et $j, il faut remplacer le "-and" par "-or" pour
que ça continue tant que l'une ou l'autre des conditions soient vraies. Le résultat sera alors
différent :
PowerShell: Boucle Do Until et Do While
I. Présentation
Cette commande PowerShell a pour objectif d’expliquer le fonctionnement des boucles
Do..Until et Do..While en PowerShell, car elles ont un rôle important à jouer dans vos
scripts. Avec une syntaxe très proche voire identique, ces deux boucles ont malgré tout une
logique différente.
Autrement dit :
Joue {ce code} Jusqu'à ce que (la condition soit vraie)
Ce qui peut-être intéressant notamment pour vérifier un état dans le" Do" et dès que l'état
attendu arrivera, on sortira de la boucle. Il y a de nombreux cas d'utilisation de ce type de
boucle, ça peut notamment servir de temporisation dans un script pour attendre qu'un état
bascule sur l'état attendu avant de continuer.
Prenons un exemple tout simple, avec une variable $i que l'on va incrémenter de 1 à chaque
fois que l'on rejoue un tour de boucle. On souhaite jouer le code jusqu'à ce que $i soit égal à
10. Voici le code :
$i = 0
Do{
$i++
Vous verrez que ça marche parfaitement, dès que $i sera égal à 10, on sort de la boucle.
Vous verrez que ça marche parfaitement, dès que $i sera égal à 10, on sort de la boucle.
On peut aussi ajouter plusieurs conditions, admettons que nous avons aussi une variable $j qui
s'incrémente de 1 à chaque tour de boucle... On va initialiser cette variable à 5 alors que $i est
initialisé à 0. On souhaite sortir de la boucle dès que $i ou $j arrive à 10 :
$i = 0
$j = 5
Do{
$i++
$j++
Write-Host "i = $i et j = $j"
Write-Host "Une des deux variables est arrivée à 10 donc on sort de la boucle !"
Vous remarquerez que l'on encadre chaque condition par des parenthèses de la même manière
qu'on peut le faire dans un if, par exemple. De plus, on utilise ensuite l'opérateur -or mais on
pourrait aussi utiliser un autre opérateur tel que -and, selon ce que l'on souhaite faire.
Autrement dit :
Joue{ce code} Tant que (la condition est vraie)
Cette boucle est similaire à une boucle classique While, à l'exception de la syntaxe qui sera
différente. Dans le cas de Do While on se dit "Je joue le code tant que la condition est vraie"
alors que dans la boucle While on se dit "Tant que la condition est vraie, je joue". Tout n'est
qu'une question d'ordre dans la syntaxe.
Si l'on voudrait prendre comme exemple, une variable $i qui s'incrémente comme on l'a fait
dans l'exemple du Do-Until, on pourrait mais il faudrait adapter la condition. Car si on
prendre comme condition "$i = 10" ceci veut dire que si on initialise $i à 0, il ne sera pas égal
à 10 alors on va directement quitter la boucle. Pour avoir un équivalent il faut mettre dans la
condition "$i inférieur ou égal à 10".
Do{
$i++
Write-Host $i
On peut voir dans la console que l'on sort de la boucle dès que je ferme le Bloc-notes ouvert
sur ma machine :
Il est à noter que pour ajouter plusieurs conditions dans le Do-While, c'est la même syntaxe
que pour un if ou un Do-Until.
En résumé...
Avec le Do-Until on joue du code jusqu'à ce que la condition soit vraie, c'est à dire
qu'une variable atteigne une valeur spécifique, par exemple, alors qu'avec Do-While on
joue du code tant que la condition est vraie.
PowerShell et les boucles ForEach
I. Présentation
Dans la continuité sur les boucles For en PowerShell, Il est intéressant d'en proposer un
second sur les boucles ForEach car elles sont vraiment indispensables. C'est le type de
boucle qu’on utilise le plus dans les scripts notamment lorsqu'il y a besoin de manipuler une
collection de données. L'avantage c'est que la boucle ForEach va automatiquement traiter
toutes les lignes de notre collection, il n'y a pas besoin de connaître à l'avance le nombre
qu'il y en a, comme c'est le cas avec une boucle For.
Foreach($element in $collection)
{
"$($element.Name) dans l'état : $($element.Status) ($($element.StartType))"
}
J'ai utilisé les noms $element et $collection pour mes variables, mais vous pouvez utiliser
d'autres noms... Le résultat contiendra le nom du service, son état actuel et son type de
démarrage (manuel ou automatique).
wscsvc dans l'état : Running (Automatic)