Examiner et utiliser la boucle ForEach dans des scripts Windows PowerShell
Quand vous effectuez une combinaison, les commandes du pipeline sont appliquées à chaque objet. Dans certains cas, vous pouvez être amené à utiliser l’applet de commande ForEach-Object pour traiter les données du pipeline. Quand vous stockez des données dans un tableau, la construction ForEach vous permet de traiter chaque élément du tableau.
La construction ForEach utilise la syntaxe suivante :
ForEach ($user in $users) {
Set-ADUser $user -Department "Marketing"
}
Dans l’exemple précédent, il existe un tableau nommé $users qui contient des objets utilisateur AD DS (services de domaine Active Directory). L'expression ForEach traite les commandes Windows PowerShell situées entre les accolades, une fois par objet. Quand les commandes sont traitées, $user est la variable qui contient chaque élément du tableau. Lors de la première itération, $user contient $users[0], et lors de la deuxième itération, $user contient $users[1]. Cela se poursuit jusqu’à ce que tous les éléments du tableau aient été traités une seule fois.
Dans un script, la construction ForEach est la méthode la plus courante pour traiter les éléments que vous avez placés dans un tableau. Elle est facile à utiliser, car vous n’avez pas besoin de connaître le nombre d’éléments à traiter.
L’exemple précédent n’a qu’une seule commande entre les accolades, mais vous pouvez ajouter de nombreuses commandes, qui sont traitées pour chaque boucle. La mise en retrait des commandes entre les accolades obéit à une convention qui vise à faciliter la révision du script. L'indentation n’est pas une exigence technique, mais c’est une bonne pratique.
Le nommage des variables dans la boucle ForEach doit être significatif. La plupart du temps, vous identifiez clairement la variable utilisée dans la boucle en tant qu’instance unique du tableau. Par exemple, pour un tableau nommé $users, la variable utilisée dans la boucle peut être $user. Vous pouvez remarquer des exemples de variables avec une seule lettre qui est identique à la lettre initiale du tableau. Toutefois, cette approche ne doit être utilisée que dans du code simple qui permet d’établir aisément un lien entre les deux.
Performances parallèles
PowerShell 7 ajoute le -Parallel paramètre à l’applet de commande ForEach-Object . Cela permet au pipeline de traiter plusieurs objets simultanément, ce qui peut fournir de meilleures performances qu’une boucle ForEach standard. Envisagez d’utiliser cette option si vous utilisez PowerShell 7. L’exemple suivant montre comment utiliser ForEach-Object avec le -Parallel paramètre.
$users | ForEach-Object -Parallel { Set-ADUser $_ -Department "Marketing" }
Note
À l’intérieur d’un -Parallel bloc de script, utilisez $_ pour faire référence à l’objet de pipeline actuel, identique à celui d’un bloc normal ForEach-Object . Ceci est différent d’une foreach instruction, où vous nommez la variable d’itération vous-même. Si vous devez accéder à une variable définie en dehors du bloc parallèle, préfixez-la avec le Using: modificateur d’étendue, par exemple $Using:department.
Par défaut, le -Parallel paramètre traite cinq éléments à la fois. Vous pouvez augmenter ou diminuer cette limite avec le -ThrottleLimit paramètre.