Boucles ForEach-Object et Where-Object imbriquées dans PowerShell
-
Utilisez le cmdlet
Where-Object
dans PowerShell -
Utilisez le cmdlet
ForEach-Object
dans PowerShell -
Utilisez les cmdlets imbriqués
ForEach-Object
etWhere-Object
dans PowerShell -
Utilisez les cmdlets imbriqués
ForEach-Object
etWhere-Object
avec des instructionsif
dans PowerShell - Conclusion

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 :
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 :
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 :
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 :
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.
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