PowerShell : Boucle Do Until et Do While

I. Présentation

Ce tutoriel PowerShell a pour objectif de vous 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érentes. Pour notre plus grand plaisir, car ça offre plus de possibilités pour scripter 🙂

L'objectif est de vous expliquer simplement et de façon synthétique le fonctionnement de ces deux boucles PowerShell.

II. Do Until avec PowerShell

La boucle Do-Until en PowerShell fonctionne selon la logique suivante :

Do{code} Until(la condition soit vraie)

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++
    Write-Host "i = $i"

}Until($i -eq 10)

Write-Host "Boucle terminée !"

Vous verrez que ça marche parfaitement, dès que $i sera égal à 10, on sort de la boucle.

powershell-do-until-exemple

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"

}Until(($i -eq 10) -or ($j -eq 10))

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.

powershell-do-until-multiple-conditions

III. Do While avec PowerShell

La boucle Do-While en PowerShell fonctionne à l'inverse de la boucle Do-Until, puisqu'elle suit la logique suivante :

Do{code} While(la condition est vraie)

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".

En français ceci donne :

  • Do-Until : Incrémente $i de 1 jusqu'à ce que $i soit égal à 10
  • Do-While : Incrémente $i de 1 tant que $i est inférieur ou égal à 10

J'espère que vous avez bien compris la différence.

Prenons un exemple avec le Do-While, où l'on va incrémenter $i de 1 tant qu'il y a un processus "notepad" (Bloc-notes) en cours d'exécution sur la machine. D'abord, la condition sera :

Get-Process -Name notepad -ErrorAction SilentlyContinue

On précise le "ErrorAction" en "SilentlyContinue" pour ne pas qu'une erreur s'affiche dans la console quand le processus sera introuvable c'est à dire quand on aura fermé l'application. Pour le code de l'exemple, c'est tout simple :

$i = 0
Do{

    $i++
    Write-Host $i

}While(Get-Process -Name notepad -ErrorAction SilentlyContinue)

Write-Host "Notepad est fermé, on peut continuer !"

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 :

powershell-do-while-exemple

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.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Co-Fondateur d'IT-Connect, je souhaite partager mes connaissances et expériences avec vous, et comme la veille techno' est importante je partage aussi des actus.

florian a publié 1601 articles sur IT-Connect.See all posts by florian

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *