Les bases de PowerShell : Programmer avec des boucles

Dans ce tutoriel PowerShell, nous vous montrons comment utiliser la boucle For, la boucle ForEach-Object et les boucles While, Do-While et Do-Until.

Les boucles PowerShell, dans leur forme la plus basique, répètent simplement le même ensemble de commandes un nombre déterminé de fois. Idéales pour effectuer des actions cohérentes pendant une période donnée ou un certain nombre d’enregistrements, les boucles peuvent simplifier vos scripts de manière importante. PowerShell en particulier comporte un certain nombre de cmdlets — notamment ceux qui commencent par le verbe Get — qui renvoient des objets contenant un grand nombre de données similaires.

Il existe plusieurs types de boucles disponibles dans PowerShell, et dans de nombreux cas, plus d’une technique de boucle peut être utilisée efficacement. Il est parfois nécessaire de déterminer le type de boucle le plus efficace, que ce soit du point de vue des performances ou de la lisibilité du code.

La boucle ForEach-Object

Dans de nombreux cas, l’utilisation de la cmdlet ForEach-Object (précédemment abordée dans notre article sur le travail avec les objets PowerShell) est la meilleure façon de boucler un objet. Dans sa forme la plus simple, ForEach-Object ne nécessite qu’un objet à parcourir en boucle et un bloc de script contenant les commandes à exécuter sur chaque membre de l’objet.
Ces paramètres peuvent être spécifiés soit par les noms des paramètres -InputObject et -Process, soit en pipant l’objet vers le cmdlet ForEach-Object et en plaçant le bloc de script comme premier paramètre. Pour illustrer cette syntaxe de base, l’exemple suivant montre deux méthodes d’utilisation de ForEach-Object pour parcourir en boucle le contenu du dossier Documents d’un utilisateur :

$myDocuments = Get-ChildItem $env:USERPROFILEDocuments -File
$myDocuments | ForEach-Object {$_.FullName}
ForEach-Object -InputObject $myDocuments -Process {$_.FullName}

Dans certains scénarios, il peut être bénéfique d’effectuer une ou plusieurs actions juste avant ou juste après l’exécution de la boucle. Les paramètres -Begin et -End peuvent être utilisés pour définir des blocs de script à exécuter juste avant ou après le contenu du bloc de script -Process. Cela peut être utilisé pour définir ou modifier une variable avant ou après l’exécution de la boucle.

ForEach-Object possède deux alias, ForEach et %, et prend également en charge la syntaxe raccourcie à partir de PowerShell 3.0. Les trois exemples suivants ont une fonction identique.

Get-WMIObject Win32_LogicalDisk | ForEach-Object {$_.FreeSpace}
Get-WMIObject Win32_LogicalDisk | ForEach {$_.FreeSpace}
Get-WMIObject Win32_LogicalDisk | % FreeSpace

PowerShell For Loop

Les boucles For sont généralement utilisées pour itérer dans un ensemble de commandes un nombre de fois spécifié, soit pour parcourir un tableau ou un objet, soit simplement pour répéter le même bloc de code selon les besoins. Une boucle For est construite en définissant la valeur d’une variable à l’entrée de la boucle, la condition à laquelle la boucle doit se terminer, et une action à effectuer contre cette variable à chaque fois que l’on parcourt la boucle.

L’exemple suivant montre une boucle For de base utilisée pour créer une table de multiplication :

For ($i=0 ; $i -le 10 ; $i++) {
« 10 * $i =  » + (10 * $i)
}

Les boucles For peuvent être utilisées pour parcourir les valeurs d’un tableau en fixant la valeur initiale à l’indice initial du tableau et en augmentant la valeur de manière incrémentielle jusqu’à ce que la longueur du tableau soit atteinte. L’indice du tableau est spécifié en plaçant la variable incrémentée à l’intérieur de crochets suivant immédiatement le nom de la variable, comme le montre l’exemple suivant :

$colors = @(« Red », « Orange », « Yellow », « Green », « Blue », « Indigo », « Violet »)
For ($i=0 ; $i -lt $colors.Length ; $i++) {
$colors
}

While, Do-While, and Do-Until Loops

Un troisième type de boucle que PowerShell prend en charge implique la définition d’une condition qui permet à la boucle de traiter tant que la condition est vraie ou jusqu’à ce qu’elle soit remplie. Les boucles While et Do-While sont toutes deux utilisées pour effectuer une action pendant que la condition évalue à $true, et ne diffèrent que par leur syntaxe. Les boucles Do-Until ont une syntaxe similaire à celle de Do-While, mais arrêtent le traitement une fois que l’énoncé de la condition est rempli.

Les boucles Do-While et Do-Until commencent toutes deux par le mot-clé Do en préambule d’un bloc de script, suivi du mot-clé condition (While ou Until) et de la condition. A titre d’exemple, les deux boucles suivantes fonctionnent de manière identique, seule la condition est inversée :

$i=1
Do {
$i
$i++
}
While ($i -le 10)

$i=1
Do {
$i
$i++
}
Until ($i -gt 10)

Les boucles While s’exécutent de manière identique aux boucles Do-While, seule la syntaxe est légèrement modifiée. Les boucles While utilisent uniquement le mot-clé While, suivi de la condition et enfin du bloc de script. Cette boucle a un fonctionnement identique aux exemples précédents, et utilise la même condition que la boucle Do-While :

$i=1
While ($i -le 10)
{
$i
$i++
}

Chacun de ces trois types de boucle — les boucles Do-While, Do-Until et While — peut également être utilisé pour boucler indéfiniment ; Les boucles While et Do-While avec la condition fixée à $true et Do-Until avec la condition fixée à $false.

Dans certaines situations, vous pouvez avoir besoin de sortir prématurément d’une boucle en vous basant sur autre chose que la condition de la boucle. Dans ce cas, le mot-clé Break peut être invoqué afin de sortir de la boucle. Ce dernier exemple montre la même fonctionnalité, mais utilise une boucle infinie et le mot-clé Break pour sortir au moment approprié :

$i=1
While ($true)
{
$i
$i++
if ($i -gt 10) {
Break
}
}

.

Laisser un commentaire

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