PowerShell – `Where-Object` : filtrer les objets

Sort-Object (alias sort) permet de trier les objets reçus dans le pipeline selon une ou plusieurs propriétés. Comme toutes les commandes PowerShell, il agit sur des objets, pas sur du texte.

    6tq 5tq
  • niveau

Introduction

Where-Object (alias where, ?) permet de filtrer les objets reçus dans le pipeline. Il garde uniquement les objets qui respectent une condition. C’est l’équivalent d’un “si” appliqué à chaque élément.


Syntaxe générale

<commande> | Where-Object { <condition> }

Dans le bloc { ... }, l’objet courant du pipeline est représenté par $_.


Exemples

Garder uniquement les fichiers de plus de 1 Mo

Get-ChildItem -File | Where-Object { $_.Length -gt 1MB }

-gt signifie “greater than” (strictement plus grand).


💡 Note : que signifient 1MB, 100KB... dans PowerShell ? PowerShell accepte directement des unités de taille dans les comparaisons. Elles sont converties automatiquement en nombre d’octets.

Filtrer par extension

Get-ChildItem | Where-Object { $_.Extension -eq ".txt" }

-eq signifie “equal”.


Processus dont la consommation CPU est > 10

Get-Process | Where-Object { $_.CPU -gt 10 }

Principaux opérateurs de comparaison

Opérateur Signification
-eq égal
-ne différent
-gt > (plus grand)
-ge ≥ (plus grand ou égal)
-lt < (plus petit)
-le ≤ (plus petit ou égal)
-like correspondance (avec *)
-in liste à vérifier ("msi", "Programs")

Filtrer sur plusieurs conditions

Get-ChildItem -File |
    Where-Object { $_.Length -gt 1MB -and $_.Extension -eq ".log" }

Chaque objet du pipeline est évalué individuellement, et n’est conservé que s’il respecte toutes les conditions définies dans le bloc.

Les opérateurs logiques -and, -or et -not permettent de combiner plusieurs tests, ce qui n’est pas possible avec la version courte de la commande.

Filtrer sur plusieurs conditions nécessite d’utiliser la version complète (longue) de Where-Object, avec des accolades { }.


La version courte de Where-Object

PowerShell propose une version courte de Where-Object qui permet d’écrire des filtres simples de manière plus lisible, par exemple : Where ProviderName -eq "msi".

Dans ce cas, PowerShell interprète automatiquement la commande comme s’il s’agissait de Where-Object { $_.ProviderName -eq "msi" }.

Cette syntaxe abrégée fonctionne uniquement pour une condition simple portant sur une seule propriété avec un seul opérateur. Dès que la condition devient plus complexe (utilisation de -or, -and, plusieurs propriétés ou des calculs), il est nécessaire de revenir à la forme complète avec des accolades { }.


Résumé

Besoin Exemple
Filtrer un élément sur une propriété where { $_.Name -eq "test" }
Comparaison numérique where { $_.Length -gt 1000 }
Comparaison textuelle where { $_.Extension -eq ".jpg" }
Plusieurs conditions -and, -or, -not

Pour aller plus loin