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 (Active Directory Domain Services). La construction ForEach traite les commandes Windows PowerShell entre les accolades une fois pour chaque 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 $user[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. Elle 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
Dans PowerShell 7, le paramètre -Parallel a été ajouté à l’applet de commande ForEach-Object. Cela permet au pipeline de traiter simultanément plusieurs objets. Le traitement simultané de plusieurs objets peut offrir de meilleures performances qu’une boucle ForEach standard. Vous devez prendre en compte cela si vous utilisez PowerShell 7. L’exemple suivant explique comment utiliser ForEach-Object avec le paramètre -Parallel.
$users | ForEach-Object -Parallel { Set-ADUser $user -Department "Marketing" }
Par défaut, le paramètre -Parallel permet de traiter cinq éléments à la fois. Vous pouvez augmenter ou réduire ce nombre avec le paramètre -ThrottleLimit.