Comment utiliser la commande Where-Object dans PowerShell
-
la cmdlet
Where-Object
dans PowerShell - Création de conditions de filtre avec des blocs de script dans PowerShell
-
Utiliser
Where-Object
pour filtrer des objets dans PowerShell - Création de conditions de filtre avec des paramètres dans PowerShell
- Utilisation de plusieurs déclarations conditionnelles

Lorsque vous travaillez avec les propriétés de Windows PowerShell dans une collection d’objets, vous aurez parfois besoin d’un moyen de filtrer toutes les choses spécifiques dont vous avez seulement besoin. Par conséquent, savoir comment utiliser la cmdlet Where-Object
de Windows PowerShell est une technique vitale à avoir dans votre ensemble de compétences en Windows PowerShell.
La cmdlet Where-Object
est une commande précieuse pour filtrer les objets. Dans cet article, nous allons apprendre plusieurs façons de construire une commande Where-Object
, sa syntaxe et l’utilisation de plusieurs déclarations conditionnelles.
la cmdlet Where-Object
dans PowerShell
L’unique objectif de la cmdlet Where-Object
de Windows PowerShell est de filtrer la sortie d’une commande et de retourner des informations spécifiques que nous voulons imprimer.
En résumé, la cmdlet Where-Object
est un filtre. Il nous permet de construire une condition qui retourne soit True
soit False
. En fonction du résultat de la situation, la cmdlet retourne ensuite la sortie ou non.
Vous pouvez créer cette condition de deux manières : blocs de script et paramètres.
Création de conditions de filtre avec des blocs de script dans PowerShell
Les blocs de script sont un composant vital dans Windows PowerShell. Ils sont utilisés dans des centaines d’endroits tout au long du langage de script. Un bloc de script est une fonction anonyme qui catégorise le code et l’exécute à divers endroits.
Exemple de bloc de script :
{$_.StartType -EQ 'Automatic'}
En utilisant le pipeline de Windows PowerShell, vous pourriez alors canaliser ces objets vers la cmdlet Where-Object
et utiliser le paramètre FilterScript
. Puisque le paramètre FilterScript
accepte un bloc de script, nous pouvons créer une condition pour vérifier si la propriété de chaque objet est égale à la valeur spécifique, comme dans l’exemple ci-dessous.
Exemple de code :
Get-Service | Where-Object -FilterScript { $_.StartType -eq 'Automatic' }
Where-Object
et n’incluent pas le nom du paramètre FilterScript
. Au lieu de cela, elles fournissent le bloc de script seul comme Where-Object {$_.StartType -eq 'Automatic'}
pour un moyen de script plus rapide et plus propre.Bien que ce type de syntaxe fonctionne pour ce scénario particulier, le concept d’un bloc de script avec des accolades ({}
) rend le code moins lisible et plus difficile pour les utilisateurs de Windows PowerShell moins expérimentés. Ce problème de lisibilité a conduit l’équipe de Windows PowerShell à introduire des paramètres.
Utiliser Where-Object
pour filtrer des objets dans PowerShell
La commande Get-ChildItem
obtient la liste de tous les fichiers et dossiers à l’emplacement spécifié. Supposons que vous souhaitiez uniquement afficher les fichiers .csv
dans le répertoire.
L’exemple suivant montre comment utiliser la cmdlet Where-Object
pour filtrer et sélectionner uniquement les fichiers .csv
.
Get-ChildItem | Where-Object { $_.extension -eq ".csv" }
Dans le script ci-dessus, la sortie de Get-ChildItem
est canalisée vers la cmdlet Where-Object
. La cmdlet Where-Object
filtre la sortie où l’extension de fichier est .csv
.
Sortie :
Directory: C:\Users\rhntm
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/11/2022 7:57 AM 122 books.csv
-a---- 3/8/2022 2:07 PM 780199 house_data.csv
-a---- 3/8/2022 10:38 PM 421 play_tennis.csv
Vous pouvez également utiliser Where
comme alias pour la cmdlet Where-Object
.
Ci-dessous un autre exemple qui filtre la liste des processus avec la valeur de propriété ProcessName
. Il affiche uniquement les processus qui ont spotify
comme ProcessName
.
Get-Process | where { $_.ProcessName -in "spotify" }
Sortie :
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
550 31 55036 71256 2.81 1820 3 Spotify
294 21 12328 18144 0.06 13536 3 Spotify
476 64 96012 141208 20.61 13980 3 Spotify
Vous pouvez utiliser l’opérateur -notin
pour sélectionner des valeurs n’étant pas dans la collection d’objets.
Par exemple, l’exemple suivant affiche tous les processus qui n’ont pas spotify
comme ProcessName
.
Get-Process | where { $_.ProcessName -notin "spotify" }
De cette manière, vous pouvez utiliser la cmdlet Where-Object
pour filtrer les objets de la collection d’objets en fonction de leurs valeurs de propriété.
Création de conditions de filtre avec des paramètres dans PowerShell
Introduits dans Windows PowerShell 3.0, les paramètres ont un flux plus naturel dans la manière dont ils sont écrits. En utilisant le même exemple précédent, utilisons des paramètres pour filtrer une sortie spécifique.
Exemple de code :
Get-Service | Where-Object -Property StartType -EQ 'Automatic'
Remarquez ci-dessus qu’au lieu d’utiliser un bloc de script, la commande spécifie la propriété de l’objet comme valeur du paramètre Property. De plus, l’opérateur -eq
est maintenant un paramètre, vous permettant de passer la valeur Automatic
à celui-ci.
L’utilisation de paramètres de cette manière élimine désormais le besoin d’un bloc de script. Cependant, bien que Microsoft ait introduit des paramètres comme une méthode de script plus propre, nous avons une excellente raison d’utiliser des blocs de script que nous discuterons dans la section suivante de l’article.
Utilisation de plusieurs déclarations conditionnelles
Vous pouvez combiner deux ou plusieurs conditions en utilisant un opérateur (comme -and
ou -or
) pour les évaluer à l’aide d’un bloc de script. Cependant, nous devons utiliser un composant particulier de Windows PowerShell appelé sous-expressions pour évaluer chaque condition avec succès.
Dans Windows PowerShell, nous pouvons utiliser des sous-expressions pour exécuter une expression dans une syntaxe de filtrage comme Where-Object
. Nous faisons cela en englobant toute déclaration conditionnelle que nous exécutons entre parenthèses (()
).
Exemple de code :
Get-Process | Where-Object { ($_.CPU -gt 2.0) -and ($_.CPU -lt 10) }
Exemple de bloc de script :
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------ - ------ ---- - ---- - ------ -- -- ---------- -
334 21 18972 26384 5.23 3808 0 AnyDesk
635 34 13304 51264 9.56 4140 5 notepad
726 36 12820 51196 4.69 12088 5 notepad
802 46 18356 65088 7.98 10784 5 OneDrive
340 18 6472 26436 3.44 1252 5 RuntimeBroker
698 34 14672 44484 3.63 3284 5 RuntimeBroker
323 19 5732 23432 4.00 11200 5 RuntimeBroker
560 18 6440 27752 4.63 8644 5 sihost
632 31 21524 69972 2.81 6392 5 StartMenuExperienceHost
390 18 9756 30832 3.94 3084 5 svchost
523 24 8768 36312 2.17 6300 5 svchost
524 17 6416 21036 4.42 10932 5 SynTPEnh
525 22 15336 38904 3.41 2192 5 TextInputHost
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn