Menu Fermer

Comment utiliser Where-Object de PowerShell pour filtrer les éléments

Lorsque vous travaillez avec des valeurs de propriétés PowerShell dans une collection d’objets, vous avez parfois besoin d’un moyen de filtrer tous les éléments dont vous n’avez pas besoin. Savoir utiliser la cmdlet PowerShell Where-Object est une compétence importante à avoir dans sa boîte à outils PowerShell.

La cmdlet Where-Object est un moyen pratique de filtrer des objets. Dans ce tutoriel, vous apprendrez les différentes façons d’utiliser la commande Where-Object, les paramètres disponibles, la syntaxe, ainsi que la façon d’utiliser des conditions multiples comme un pro !

Comment utiliser Where-Object de PowerShell pour filtrer les éléments

Comprendre le fonctionnement de Where-Object

Where-Object est une cmdlet utilisée pour filtrer les objets du pipeline. Vous pouvez transmettre une collection d’objets à la cmdlet, puis fournir un filtre pour sélectionner uniquement les objets que vous souhaitez renvoyer.
Il existe deux jeux de paramètres courants pour Where-Object.

  • Le premier tire parti des différents paramètres de Where-Object
  • Le second vous permet d’utiliser un bloc de script pour composer des requêtes plus avancées

Examinons le premier type de filtrage. Nous allons filtrer les processus sur la machine en fonction de leur nom.

Get-Process | Where-Object Name -eq 'Notepad'

La ligne de commande ci-dessus sélectionnera les processus dont le nom est Notepad. Lorsque vous décidez comment filtrer les objets renvoyés par une cmdlet particulière, vous pouvez utiliser Get-Member pour voir les propriétés disponibles sur l’objet.

Comment utiliser Where-Object de PowerShell pour filtrer les éléments

Pour créer des requêtes plus complexes, vous pouvez utiliser un bloc de script. La commande suivante permet d’obtenir le même résultat que l’objet précédent.

Get-Process | Where-Object { $_.Name -eq 'notepad' }

Les accolades indiquent le début et la fin d’un bloc de script. Il est similaire à une fonction. Ce bloc de script Where-Object est appelé pour chaque processus renvoyé par Get-Process. La variable $_ est utilisée pour indiquer l’objet actuel dans le tableau des objets renvoyés.

Where-Object de PowerShell est de loin l’outil le plus utilisé pour filtrer des données. Cela est dû principalement à sa puissance et, en même temps, à sa simplicité. Il sélectionne les objets d’une collection en fonction des valeurs de leurs propriétés.

Il existe d’autres cmdlets qui permettent de filtrer les données comme le cmdlet Select-Object.

Comment utiliser Where-Object de PowerShell pour filtrer les éléments

Utiliser le paramètre contains

Les opérateurs de confinement sont utiles lorsque l’on travaille avec des collections. Ils permettent de définir une condition. Il existe plusieurs exemples d’opérateurs de confinement que nous pouvons utiliser. En voici quelques-uns :

  • -contains / -ccontains – Filtre une collection contenant une valeur de propriété
  • -notcontains / -cnotcontains – Filtre une collection qui ne contient pas de valeur de propriété
  • -in / -cin – se trouve dans une collection, renvoie la valeur de la propriété si une correspondance est trouvée
  • -notin / -cnotin – n’est pas dans une collection, null/$false s’il n’y a pas de valeur de propriété

Voici un exemple de leur utilisation où on liste les services Windows contenant le mots BITS :

Get-Service | Where-Object -Property Name -Contains 'BITS'

Utiliser les opérateurs de correspondance

Dans PowerShell, vous disposez de plusieurs opérateurs de correspondance différents que vous pouvez utiliser dans le cadre de la fonction Where-Object.

  • -like / -clike – correspond à un motif de caractère générique
  • -notlike / -cnotlike – ne correspond pas à un motif de caractère générique
  • -match / -cmatch – La chaîne de caractères correspond au motif de l’expression rationnelle
  • -notmatch / -cnotmatch – la chaîne ne correspond pas au motif de l’expression rationnelle

Voici un exemple pour lister les processus dont le nom ne contient pas le mot Host :

Get-Process | Where-Object ProcessName -NotLike "*host"

Utiliser les opérateurs d’égalité

Il existe un grand nombre d’opérateurs d’égalité. En voici quelques-uns :

  • eq / -ceq – valeur égale à la valeur spécifiée
  • -ne / -cne –la valeur n’est pas égale à la valeur spécifiée
  • -gt / -cgt – valeur supérieure à la valeur spécifiée
  • -ge / -cge – valeur supérieure ou égale à la valeur spécifiée
  • -lt / -clt – valeur inférieure à la valeur spécifiée
  • -le / -cle – valeur inférieure ou égale à la valeur spécifiée

Cet exemple filtrel es services Windows dont le type de démarrage est automatique :

Get-Service | Where-Object -Property StartType -EQ 'Automatic'

Comment utiliser Where-Object avec des exemples

Filtrer par nom

Vous pouvez très facilement filtrer par le nom grâce à Where-Object.
Par exemple pour filtrer les services Windows dont le nom est RpcSs, on utilise l’opérateur -Containts :

Get-Service | Where-Object -Property Name -Contains 'RpcSs'

Et si vous souhaitez filtrer les services contenant un mot spécifique, utilisez l’opérateur -Match :

Get-Service | Where-Object -Property Name -Match 'rpc'
Comment utiliser Where-Object de PowerShell pour filtrer les éléments

Pour rechercher dans le dossier de téléchargement, les fichiers dont le nom commence par Mail :

Get-ChildItem -path 'c:\users\Mak\downloads' | Where-Object {$_.BaseName -match 'Mail*'}

Son équivalent est :

Get-ChildItem -path 'C:\users\Mak\downloads' | Where-Object BaseName -match 'Mail*'

Filtrer par date

Nous pouvons utiliser les mêmes commandes, Get-ChildItem et Where-Object, pour rechercher des fichiers en fonction des dates. Supposons que nous voulions trouver tous les fichiers qui ont été créés ou mis à jour au cours de la semaine dernière.
Nous utilisons la propriété LastWriteTime et les paramètres Get-Date et AddDays pour y parvenir. Cela fonctionne à merveille.
Voici comment faire :

Get-ChildItem | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-7)}
Comment utiliser Where-Object de PowerShell pour filtrer les éléments

Recherche de fichiers d’un type et d’une taille spécifique

Vous avez déjà vu quelques exemples de la commande -filter ci-dessus. Il s’agit du principal exemple d’utilisation des paramètres de filtre dans vos commandes et vos scripts. Il vous permet de vous concentrer sur les données précises que vous recherchez.
Voici un exemple qui filtre les fichiers ZIP avec une taille supérieur à 150 Mo.

Get-ChildItem -Path 'C:\users\Mak\Downloads' -filter *.zip | where-Object Length -ge 150000
Comment utiliser Where-Object de PowerShell pour filtrer les éléments

Utiliser plusieurs opérateurs

Ce cmdlet vous permet également d’utiliser des opérateurs logiques pour relier plusieurs expressions. Vous pouvez évaluer plusieurs conditions dans un seul bloc de script. Voici quelques exemples.

  • -and – Le bloc de script évalue True si les expressions sont toutes deux évaluées logiquement comme True.
  • -or – Le bloc est évalué à Vrai si l’une des expressions de chaque côté est Vrai.
  • -xor – Le bloc de script est évalué comme Vrai lorsque l’une des expressions est Vraie et l’autre Fausse.
  • -not ou ‘!’ – Annule l’élément de script qui le suit.
get-command | Where-Object {($_.Name -like '*import*') -and ($_.CommandType -eq 'cmdlet')}
Comment utiliser Where-Object de PowerShell pour filtrer les éléments

Filtrer les processus selon l’utilisation CPU

Ce dernier exemple liste les processus en cours d’exécution dont l’utilisation CPU est compris entre 2 et 10%.

Get-Process | Where-Object {($_.CPU -gt 2.0) -and ($_.CPU -lt 10)}
Comment utiliser Where-Object de PowerShell pour filtrer les éléments