Comprendre la boucle ForEach et ForEach-Object de PowerShell

Dans le langage de script Microsoft PowerShell, les cmdlets sont utilisés pour effectuer trois opérations : collecter des informations, définir des informations et supprimer des informations. Outre les cmdlets, PowerShell offre également la possibilité de traiter les informations plusieurs fois. Il existe deux fonctions PowerShell intégrées que la plupart des administrateurs PowerShell utilisent. Il s’agit de ForEach Loop et ForEach-Object. La boucle ForEach de PowerShell vous permet d’itérer dans un ensemble d’éléments rassemblés dans une variable PowerShell. Par exemple, à l’aide de la cmdlet PowerShell Get-ADUser, vous pouvez collecter des informations sur les utilisateurs dans Active Directory. Si vous aviez besoin de regarder la propriété de la ville de chaque utilisateur avant d’entreprendre une action, vous pourriez utiliser la boucle ForEach. La boucle ForEach-Object peut être utilisée pour travailler directement avec des objets et est surtout utilisée dans un pipeline, comme nous allons l’expliquer dans cet article. Voyons quelques exemples dans lesquels les fonctions ForEach Loop et ForEach-Object sont utilisées.

PowerShell ForEach Loop

Notre premier exemple d’utilisation de ForEach Loop consiste à vérifier la propriété city des utilisateurs Active Directory, puis à prendre une action. Supposons que vous souhaitiez exporter les utilisateurs dont la propriété city est définie sur « London », puis enregistrer le résultat dans un fichier CSV. Voici le script PowerShell:

Comme vous pouvez le voir dans le script ci-dessus, nous avons créé une variable nommée $CityReport qui stocke le chemin d’accès au fichier CSV où le rapport sera enregistré. Ensuite, nous collectons tous les utilisateurs d’une unité organisationnelle spécifique et stockons les utilisateurs collectés avec toutes les propriétés dans la variable $AllUsersNow. Ensuite, le traitement de la boucle ForEach commence. Dans la fonction ForEach Loop, nous vérifions la propriété de la ville de l’utilisateur, puis, à l’aide d’une condition IF, nous vérifions si la propriété de la ville contient la valeur « London » ou non pour l’utilisateur actuel. Si l’utilisateur détient la valeur « London » dans la propriété city, les valeurs actuelles du nom d’utilisateur et de la ville sont ajoutées au fichier C:\Temp\CityReport.CSV.

Un autre exemple d’utilisation de ForEach Loop consiste à traiter les informations stockées dans un fichier CSV. Supposons que vous ayez un fichier CSV qui contient des valeurs de nom d’utilisateur, de ville et de département. Vous souhaitez modifier les propriétés de la ville et du département de l’utilisateur à partir du fichier CSV. Pour ce faire, vous utiliserez le script PowerShell ci-dessous :

Comme vous pouvez le voir dans le script ci-dessus, nous avons importé le contenu du fichier CSV dans la variable $CSVFile, puis à l’aide de la boucle ForEach, nous stockons les valeurs de département et de ville du fichier CSV dans les variables $NewDepartment et $NewCity, puis à l’aide de la cmdlet PowerShell Set-ADUser, nous mettons à jour les valeurs de département et de ville pour l’utilisateur.

En bref, utilisez la boucle ForEach de PowerShell lorsque vous devez traiter des informations plus d’une fois si vous devez effectuer une action sur un élément spécifique en fonction de la valeur de la propriété de l’élément, et/ou lorsque vous devez modifier les informations d’un objet à partir d’un fichier.

Outre la fonction ForEach Loop, PowerShell propose également ForEach-Object. Le ForEach-Object, comme son nom l’indique, travaille directement avec les objets et est surtout utilisé dans un pipeline. Par exemple, comme vous pouvez le voir dans la commande ci-dessous, la cmdlet Get-Process récupère tous les processus sur l’ordinateur local et ForEach-Object après le pipeline (|) traite les objets (noms des processus), puis affiche simplement le nom du processus dans la fenêtre de sortie.

Get-Process | ForEach-Object {$_.ProcessName}

De même, si vous aviez besoin de voir le nom du processus ainsi que son ID, vous exécuterez cette commande :

Get-Process | ForEach-Object {$_.ProcessName, $_.ID}

Un autre exemple d’utilisation de ForEach-Object est d’obtenir la longueur de tous les fichiers d’un répertoire. Supposons que vous souhaitiez vérifier la longueur de tous les fichiers du dossier C:\Temp. Vous exécuterez ces commandes:

$ThisDir = « C:\Temp »
Get-ChildItem $ThisDir | ForEach-Object -Process {if (!$_.PSIsContainer) {$_.Name ; $_.Length / 1024 ;  »  » }}

Dans l’exemple PowerShell ForEach-Object ci-dessous, vous collectez des événements à partir du journal des événements de l’application, puis vous enregistrez le message d’événement dans un fichier texte.

Prenez-le à partir d’ici

Donc, vous avez maintenant une idée de la façon d’utiliser les fonctions PowerShell intégrées ForEach et ForEach-Object. La boucle ForEach de PowerShell peut être utilisée pour itérer à travers un ensemble d’éléments collectés dans une variable PowerShell et stockés dans un fichier CSV. La fonction ForEach-Object peut être utilisée pour travailler directement avec des objets. Les exemples que nous avons fournis en utilisant les fonctions ForEach Loop et ForEach-Object dans cet article devraient vous permettre de démarrer et vous faire réfléchir à des façons d’utiliser ces commandes dans votre travail.

.

Laisser un commentaire

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