La boucle While de PowerShell : Un guide de base

PowerShell est un langage de script puissant qui offre de nombreuses fonctionnalités pour l’automatisation et la gestion des systèmes basés sur Windows. L’une des constructions les plus couramment utilisées est la boucle while de PowerShell.

Ne vous inquiétez pas si vous êtes bloqué dans une boucle infinie en essayant d’apprendre le script PowerShell. Laissez la boucle while de PowerShell vous guider vers votre grande évasion. Et dans ce tutoriel, vous reviendrez aux bases de travail avec les boucles while en PowerShell pendant que vous écrivez vos scripts.

Lisez la suite pour faire passer vos compétences en scripting PowerShell au niveau supérieur!

Prérequis

Ce tutoriel sera une démonstration pratique. Pour suivre, assurez-vous d’avoir ce qui suit:

  • A Windows machine – This tutorial uses Windows 10.
  • Windows PowerShell 5.0 ou version ultérieure installée – Ce tutoriel utilise PowerShell 7.
  • A user account with administrator privileges.

Exécution de boucles while à condition unique

Un des types de boucles while les plus simples est le type à condition unique. Contrairement à l’instruction If, ce type de boucle exécute un ensemble de commandes données tant qu’une condition spécifiée s’évalue à vrai. Lorsqu’un ‘False’ est renvoyé, la boucle se termine et l’exécution se poursuit avec le reste du script.

Voici la syntaxe d’une boucle while pour une seule condition :

  • La première chose que vous remarquerez est l’utilisation de parenthèses. La condition doit être entre parenthèses, tandis que le bloc de code est un ensemble de commandes PowerShell qui s’exécutent tant que la condition est vraie.
  • La deuxième chose à noter est que la condition doit renvoyer une valeur booléenne, qui s’évalue soit à Vrai, soit à Faux.
while (condition)
{

	# Bloc de code à exécuter

}

Exécutez le code ci-dessous, où la valeur de $val commence à 0 et est incrémentée de 1 à chaque fois que le bloc de code s’exécute jusqu’à ce que la valeur de la variable $val soit égale à 3.

Lorsque $val atteint une valeur de 3, ce qui rend la condition Fausse, la boucle s’arrête et l’exécution continue avec le reste du script.

# Déclare la variable $val avec la valeur initiale de 0
$val = 0

# Configure la boucle while pour s'exécuter jusqu'à ce que la valeur de la variable $val atteigne 3
while($val -ne 3)
{
	# Incrémente la valeur de la variable $val de 1
	$val++
	
	# Imprime la valeur actuelle de la variable $val
	Write-Host $val
}
Understanding Single Condition While Loops.

Exécuter une boucle While en PowerShell avec des variables intégrées ($true/$false)

L’exemple précédent, utilisant des conditions dans la boucle while, fonctionne bien. Mais vous pouvez également utiliser les variables intégrées de PowerShell, telles que $true et $false, pour créer une boucle While.

La syntaxe ci-dessous s’exécute jusqu’à ce que $true ne soit plus $true. En d’autres termes, la boucle s’exécute indéfiniment. Mais vous devez toujours inclure une manière d’interrompre une boucle infinie. Sinon, vous restez bloqué indéfiniment. Vous en apprendrez davantage sur la façon de sortir d’une boucle en utilisant break et continue plus tard dans ce tutoriel.

while($true)
{

	# Bloc de code à exécuter

}

Exécutez le bloc de code ci-dessous, qui s’exécute indéfiniment, affichant la valeur de $i dans la console.

# Déclare la variable $i avec une valeur initiale de 0
$i = 0

# Configure la boucle While pour s'exécuter tant que la condition est $true
while($true)
{
	# Incrémente la valeur de $i de 1
	$i++
	
	# Affiche la valeur actuelle de la variable $i
	Write-Host $i
}

Maintenant, appuyez sur Ctrl+C pour sortir de la boucle. Cette boucle consomme de nombreuses ressources système, soyez prudent lors de son utilisation.

Executing a while loop with PowerShell’s built-in ($true) variable

Exécution de boucles While à conditions multiples

En plus des boucles while à condition unique, vous pouvez également créer des boucles while à condition multiple. Tout comme la boucle While à condition unique, les conditions doivent renvoyer une valeur booléenne, soit True soit False.

Voici la syntaxe pour une boucle while à condition multiple, similaire à la syntaxe pour une boucle while à condition unique. La principale différence est que vous pouvez inclure plusieurs conditions séparées par les opérateurs suivants :

  • ET (-and) – Les deux conditions doivent être vraies.
  • OU (-or) (l’une ou l’autre condition peut être vraie).
# Opérateur ET
while (condition1 -AND condition2)
{

	# Bloc de code à exécuter

}

# Opérateur OU
while (condition1 -OR condition2)
{

	# Bloc de code à exécuter

}

Exécutez le code ci-dessous, qui boucle tant que $val n’est pas égal (-ne) à 3 -and que $i n’est pas égal (-ne) à 5.

Lorsque les valeurs des deux variables atteignent leurs conditions respectives, la boucle se termine et l’exécution continue avec le reste du script.

# Déclare les variables $val et $i avec des valeurs initiales de 0
$val = 0
$i = 0

# Définit la boucle While pour s'exécuter jusqu'à ce que $val soit égal à 3 et $i soit égal à 5
while($val -ne 3 -and $i -ne 6)
{
	# Incrémente $val de 1
  $val++
	# Incrémente $i de 2
  $i += 2
	# Affiche la valeur actuelle des variables $val et $i
  Write-Host "$val, $i"
}

Exécution d’une boucle while avec l’opérateur AND

Executing a while loop with AND operator

Maintenant, exécutez le code ci-dessous, qui demande à l’utilisateur son âge, stocké dans la variable $age.

Si l’utilisateur saisit un nombre inférieur à (-lt) 1 ou n’est pas un nombre (-nomatch), l’utilisateur est invité à saisir à nouveau un nombre valide. Ce comportement est utile pour donner aux utilisateurs plusieurs chances de saisir une entrée valide.

# Invite les utilisateurs à saisir leur âge
$age = Read-Host "Please Enter Your Age"

# Définit la boucle While pour s'exécuter jusqu'à ce que l'utilisateur fournisse une entrée valide
while($age -notmatch "\\d+" -or $age -lt 1)
{
	# Demande à nouveau à l'utilisateur de saisir un âge valide
  $age = Read-Host "Please Enter Your Valid Age"
}
# Affiche l'entrée d'âge valide
Write-Host "Your age is $age

Dans la sortie ci-dessous, vous pouvez voir que l’utilisateur a été invité à saisir son âge trois fois, comme suit :

  • La première fois, l’utilisateur a saisi dix, qui n’est pas un nombre.
  • La deuxième fois, l’utilisateur a saisi 0, ce qui est inférieur à 1.
  • La troisième fois, l’utilisateur a saisi 10, qui est un âge valide.
Executing a while loop with the OR operator

Utilisation des mots clés BREAK et CONTINUE dans les boucles While

Vous avez vu comment les boucles while ajoutent de la flexibilité à votre script PowerShell. Mais pour mieux contrôler l’exécution de vos boucles While, ajoutez les mots clés break et continue.

Par exemple, si vous voulez traiter uniquement un certain nombre d’éléments dans un tableau, vous pouvez utiliser le mot clé BREAK pour sortir de la boucle une fois que le nombre d’éléments souhaité a été traité.

Ces mots clés fonctionnent comme suit:

Keyword Function
break Immediately exits the loop and continues execution with the rest of the script.
continue Skips over the remaining code block in the current iteration of the loop and continues with the next iteration.

Exécutez le code ci-dessous, qui parcourt un tableau de 10 éléments.

Dans le code ci-dessous, l’instruction if vérifie la valeur de $i. Si la valeur de $i est 5, le mot clé continue saute le reste du code dans la boucle et passe à l’itération suivante. Si la valeur de $i est 8, le mot clé break sort de la boucle et continue avec le reste du script.

Sinon, la boucle while imprime (Write-Host) et incrémente la valeur de la variable $i de 1.

# Déclare un $tableau de 10 éléments
$array = 1..10
# Déclare la variable $i avec une valeur initiale de 0
$i = 0
# Configure la boucle While pour s'exécuter jusqu'à ce que la condition soit remplie
while($i -lt $array.Count)
{
	# Vérifie si $i est égal à 5
  if($i -eq 5)
  {
		# Si oui, incrémente $i de 1
    $i++
		# Passe à l'itération suivante
    continue
  }
	# Vérifie si $i est égal à 8
  if($i -eq 8)
  {
		# Si oui, interrompt la boucle While et continue avec le reste du script
    break
  }
	# Affiche la valeur actuelle de $i
  Write-Host "Processing item $i"
	# Incrémente $1 de 1
  $i++
}

Comme vous pouvez le voir dans la sortie ci-dessous, la boucle a sauté les cinquième et huitième éléments du tableau. La boucle while a traité tous les autres éléments du tableau et s’est arrêtée après avoir atteint le huitième élément.

Executing a while loop with break and continue keywords

Limiter le temps d’exécution d’une boucle While

Typiquement, vous voudrez peut-être limiter la durée pendant laquelle une boucle s’exécute. Peut-être essayez-vous de vous connecter à un serveur distant. Si c’est le cas, vous pouvez donner au serveur le temps de répondre avant la fin du délai et la sortie de la boucle en utilisant la cmdlet Start-Sleep à l’intérieur de votre boucle while.

Le cmdlet Start-Sleep met en pause l’exécution du script pendant une durée spécifiée.

Exécutez le code ci-dessous pour obtenir et stocker la date et l’heure actuelles Get-Date dans la variable $startTime. La boucle while s’exécute tant que la date/heure actuelle est inférieure à 10 secondes à partir de la valeur stockée dans $startTime.

Pendant l’exécution de la boucle while, un message s’affiche tandis que le cmdlet Start-Sleep met en pause l’exécution du script pendant 1 seconde.

Le bloc de code ci-dessous est simplement un modèle pour ce que vous utiliseriez réellement en pratique. Vous pouvez ajouter plus de code à l’intérieur de la boucle selon vos besoins.

# Obtenir et stocker la date/heure actuelle
$startTime = Get-Date
# Définit la boucle While pour s'exécuter tant que la date/heure actuelle est inférieure à 10 secondes 
	# à partir de la valeur stockée dans $startTime.
while((Get-Date) -lt ($startTime.AddSeconds(10)))
{
	# Imprime un message
  Write-Host "Waiting for server to respond..."
	# Met en pause le script pendant une seconde
  Start-Sleep -Seconds 1
}

Vous pouvez voir ci-dessous que la boucle a continué à s’exécuter pendant 10 secondes avant de sortir de la boucle.

Limiting the time a while loop runs

Conclusion

Les boucles PowerShell while sont utiles lorsqu’on est confronté à des concepts complexes pour éviter de rester bloqué dans une boucle ou lors de l’écriture de vos scripts. Et dans ce tutoriel, vous avez appris de nombreuses façons de travailler avec les boucles while pour des scripts plus flexibles et puissants.

Avec cette connaissance nouvellement acquise, tout est possible. Alors pourquoi ne pas maximiser l’utilisation des opérateurs logiques et des mots-clés pour automatiser les tâches avec vos scripts?

Source:
https://adamtheautomator.com/powershell-while-loop/