Comment utiliser la commande Where-Object dans PowerShell

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

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' }
Note
De nombreuses personnes utilisent des paramètres positionnels avec la cmdlet 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
Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Article connexe - PowerShell Statement