Boucles ForEach-Object et Where-Object imbriquées dans PowerShell

  1. Utilisez le cmdlet Where-Object dans PowerShell
  2. Utilisez le cmdlet ForEach-Object dans PowerShell
  3. Utilisez les cmdlets imbriqués ForEach-Object et Where-Object dans PowerShell
  4. Utilisez les cmdlets imbriqués ForEach-Object et Where-Object avec des instructions if dans PowerShell
  5. Conclusion
Boucles ForEach-Object et Where-Object imbriquées dans PowerShell

Les cmdlets Where-Object et ForEach-Object de PowerShell sont des outils indispensables pour filtrer et traiter des données de manière systématique et efficace. En exploitant la puissance de ces cmdlets, les utilisateurs de PowerShell peuvent manipuler les ensembles de données avec précision et aisance, effectuant des actions basées sur des conditions spécifiques et itérant sur des collections sans effort.

Cet article élucide l’utilisation de Where-Object et ForEach-Object, démontrant comment ils peuvent être employés individuellement et conjointement pour accomplir diverses tâches. Du filtrage des services Windows à l’exécution de calculs sur des données numériques, en passant même par l’implémentation d’opérations imbriquées pour des scénarios plus complexes, ces cmdlets offrent un cadre robuste pour la manipulation des données dans les scripts PowerShell.

Utilisez le cmdlet Where-Object dans PowerShell

Le Where-Object est un cmdlet intégré qui filtre la sortie de la commande et montre les informations que vous souhaitez voir. En général, le Where-Object fonctionne comme un filtre.

Il vous permet également de créer des conditions qui peuvent renvoyer soit vrai, soit faux.

Dans l’exemple ci-dessous, nous allons trouver tous les services qui s’exécutent sur notre ordinateur en mode automatique. La commande à cet effet est quelque chose comme ce qui suit :

Get-Service | Where-Object -FilterScript { $_.StartType -EQ 'Automatic' }

Dans cet extrait de code, nous commençons par récupérer une collection de services Windows à l’aide du cmdlet Get-Service. Cette collection est ensuite passée au cmdlet Where-Object, où un script de filtrage est appliqué à chaque objet de service dans le pipeline.

Dans le script de filtrage, nous évaluons la propriété StartType de chaque objet de service pour déterminer si elle est égale à la chaîne "Automatic". Si la propriété StartType d’un service correspond à ce critère, elle est transmise à travers le pipeline.

Ce script de filtrage sélectionne effectivement uniquement ces services dont le type de démarrage est défini sur "Automatic". Le résultat de cette opération de filtrage est un sous-ensemble de la collection de services d’origine, contenant uniquement les services configurés pour démarrer automatiquement.

Après avoir exécuté la ligne de commande ci-dessus, vous obtiendrez une sortie comme celle ci-dessous :

powershell foreach-objet imbriqué où-objet - sortie 1

Utilisez le cmdlet ForEach-Object dans PowerShell

Le ForEach-Object vous permettra d’exécuter une tâche spécifique pour chaque objet spécifié. Dans notre exemple ci-dessous, nous allons diviser chaque objet par 1024.

Le code pour notre exemple sera comme suit :

3000, 567980, 112432 | ForEach-Object -Process { $_ / 1024 }

Dans cet extrait de code, nous itérons sur une collection de trois nombres : 3000, 567980, et 112432 en utilisant le cmdlet ForEach-Object. Dans le bloc de script, nous effectuons un calcul sur chaque nombre en le divisant par 1024.

Ce calcul est exécuté pour chaque nombre dans la collection individuellement. En conséquence, nous obtenons une nouvelle collection contenant les résultats de l’opération de division, où chaque nombre de la collection d’origine a été divisé par 1024.

Après avoir exécuté la ligne de commande ci-dessus, vous obtiendrez une sortie comme indiqué ci-dessous :

powershell foreach-objet imbriqué où-objet - sortie 2

Utilisez les cmdlets imbriqués ForEach-Object et Where-Object dans PowerShell

La combinaison des cmdlets ForEach-Object et Where-Object permet des opérations puissantes de manipulation et de filtrage des données. L’approche imbriquée, où un cmdlet est utilisé dans le cadre d’un autre, améliore la capacité à traiter les données de manière itérative et sélective.

Cette méthode est particulièrement utile lorsqu’il s’agit de tableaux ou de collections d’objets et qu’il est nécessaire d’effectuer des actions basées sur des critères spécifiques.

Exemple :

$MyArray = ("python", "explorer", "edge")
$MyArray | ForEach-Object { Get-Process | Where-Object ProcessName -EQ $_ | Out-Host }

Dans cet extrait de code, $MyArray contient une liste de noms de processus. Le cmdlet ForEach-Object itère sur chaque nom de processus dans le tableau.

Dans le bloc de script, Get-Process récupère des informations sur tous les processus en cours d’exécution, et Where-Object filtre ces processus en fonction de la condition que leur propriété ProcessName corresponde au nom de processus actuel ($_). Les objets processus filtrés sont ensuite affichés sur la console à l’aide de Out-Host.

Sortie :

powershell foreach-objet imbriqué où-objet - sortie 3

Utilisez les cmdlets imbriqués ForEach-Object et Where-Object avec des instructions if dans PowerShell

Dans le script PowerShell, les instructions if imbriquées offrent une façon d’appliquer une logique conditionnelle au sein des boucles et autres structures de contrôle. Lorsqu’elles sont combinées avec les cmdlets ForEach-Object et Where-Object, les instructions if imbriquées permettent des opérations complexes de filtrage et de traitement des données.

Cette méthode offre flexibilité et granularité dans le traitement des données en fonction de plusieurs critères. Elle est particulièrement utile dans les scénarios où un contrôle fin sur la manipulation des données est requis.

Exemple :

$MyArray = @("Value1", "Value2", "Value3")
$MyArray | ForEach-Object {
    if ($_ | Where-Object { $_ -eq "Value1" -or $_ -eq "Value3" }) {
        $_ | Out-Host
    }
}

Dans cet extrait de code, $MyArray contient une liste de valeurs. Le cmdlet ForEach-Object itère sur chaque valeur dans le tableau.

Dans l’instruction if imbriquée, Where-Object filtre les valeurs en fonction de la condition qu’elles soient égales à "Value1" ou "Value3".

Si la condition est remplie, la valeur est affichée sur la console à l’aide de Out-Host.

Sortie :

powershell foreach-objet imbriqué où-objet - sortie 4

Conclusion

Avec ses cmdlets polyvalentes telles que Where-Object et ForEach-Object, PowerShell permet aux utilisateurs de tirer parti de capacités de traitement de données complexes avec finesse. Que ce soit pour sélectionner des éléments spécifiques d’une collection, appliquer une logique conditionnelle, ou exécuter des tâches sur chaque élément de manière itérative, PowerShell fournit les outils nécessaires pour rationaliser le flux de travail et améliorer la productivité.

En maîtrisant ces cmdlets et en comprenant leurs nuances, les utilisateurs peuvent exploiter tout le potentiel de PowerShell pour une manipulation efficace des données et des tâches de script, débloquant ainsi un monde de possibilités en matière d’automatisation et d’administration.

Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn

Article connexe - PowerShell Object