2.4 : Where-Object, Sort-Object, Select-Object : les postes de tri

Trois postes reviennent dans presque toutes les chaînes de montage de Nordika. Sophie les appelle « le trio de base » : à eux seuls, ils permettent déjà de répondre à la majorité des tickets du quotidien.

Where-Object : le poste de contrôle qualité

Where-Object ne garde que les pièces qui remplissent une condition. Tout ce qui ne correspond pas est retiré du tapis.

Get-Service | Where-Object { $_.Status -eq "Running" }

Depuis PowerShell 3.0, il existe aussi une syntaxe simplifiée, sans $_ ni accolades, pour les conditions simples :

Get-Service | Where-Object Status -eq "Running"

Les deux écritures sont équivalentes ; la syntaxe avec $_ reste indispensable dès que la condition se complique (plusieurs critères, calculs…) :

Get-Service | Where-Object { $_.Status -eq "Running" -and $_.StartType -eq "Automatic" }

Les opérateurs de comparaison PowerShell s’écrivent avec un tiret, pas avec les symboles habituels :

OpérateurSignification
-eqégal à
-nedifférent de
-gt / -ltsupérieur / inférieur à
-likecorrespond à un motif (avec *)
-matchcorrespond à une expression régulière

Sort-Object : le poste de classement

Sort-Object réordonne les pièces selon une propriété précise.

Get-Process | Sort-Object -Property WS -Descending

Sans -Descending, le tri se fait par défaut du plus petit au plus grand. On peut aussi trier sur plusieurs propriétés à la fois, dans l’ordre de priorité indiqué :

Get-Service | Sort-Object -Property Status, DisplayName

Ici, les services sont d’abord regroupés par Status, puis triés par nom à l’intérieur de chaque groupe.

Select-Object : le poste d’emballage final

Select-Object sert à deux choses bien différentes, souvent confondues au début.

1. Limiter le nombre de pièces (avec -First ou -Last) :

Get-Process | Sort-Object -Property WS -Descending | Select-Object -First 5

2. Ne garder que certaines propriétés d’un objet (avec -Property) :

Get-Process | Select-Object -Property ProcessName, Id, WS

Ce deuxième usage est essentiel : il permet de créer un objet « allégé », ne contenant que les informations utiles, pratique avant d’exporter un résultat en CSV par exemple (on verra ça en section 4).

Le trio assemblé : un vrai ticket Nordika

Sophie vous donne enfin un ticket complet : « Affiche les 5 services arrêtés qui devraient normalement démarrer automatiquement, avec juste leur nom et leur statut. »

Get-Service | 
    Where-Object { $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic" } | 
    Select-Object -Property DisplayName, Status | 
    Select-Object -First 5

Quatre postes, un tapis roulant, un résultat propre et exploitable — sans une seule ligne de code compliquée.

Un repère simple pour ne jamais confondre ces trois postes : Where-Object retire des lignes, Sort-Object réordonne les lignes, Select-Object retire des colonnes ou limite le nombre de lignes. Ce sont trois opérations différentes, qu’on combine mais qu’on ne substitue jamais l’une à l’autre.