Vous savez maintenant qu’une cmdlet renvoie de vrais objets (leçon 1.2), et que Get-Member permet d’ouvrir ces objets pour voir ce qu’ils contiennent (leçon 2.2). Il est temps de relier les postes de travail entre eux : c’est le rôle du pipeline, symbolisé par le caractère |.
Le principe du tapis roulant
Sophie pointe deux postes voisins de l’atelier : “Regarde. Ce que sort le premier poste, c’est exactement ce qu’attend le suivant en entrée. Rien ne se perd, rien ne se retranscrit.”
Get-Process | Where-Object { $_.WS -gt 100MB }
Ici, il se passe trois choses :
Get-Processproduit une collection d’objetsProcess- Le
|prend cette collection telle quelle (pas de texte, pas de conversion) et la pose sur le tapis Where-Objectreçoit ces objets un par un, et ne garde que ceux dont la propriétéWS(mémoire utilisée) dépasse 100 Mo
Aucune des deux cmdlets n’a besoin de “comprendre” l’affichage de l’autre. Elles se passent directement des objets .NET, avec toutes leurs propriétés intactes.
$_ : la pièce en cours de traitement
Vous avez sans doute remarqué $_ dans l’exemple ci-dessus. C’est une variable spéciale qui représente l’objet actuellement traité dans le pipeline, un par un — comme un ouvrier qui ne voit qu’une seule pièce à la fois sur le tapis, jamais la pile entière.
Get-Process | Where-Object { $_.ProcessName -eq "pwsh" }
Ici, $_ représente, tour à tour, chaque processus qui défile devant le poste Where-Object.
Enchaîner plusieurs postes
Rien n’empêche d’aligner plus de deux postes sur le tapis :
Get-Process | Where-Object { $_.WS -gt 100MB } | Sort-Object -Property WS -Descending | Select-Object -First 3
Lu à voix haute, ça donne : “Récupère tous les processus, ne garde que ceux qui dépassent 100 Mo, trie-les par mémoire décroissante, et affiche seulement les 3 premiers.”
Chaque poste fait une seule chose, simplement. C’est la somme de ces petites transformations qui donne sa puissance à la chaîne complète — bien plus lisible que d’essayer d’écrire toute la logique en une seule commande complexe.
L’ordre des postes a de l’importance
Un piège classique : l’ordre des cmdlets sur le tapis n’est pas interchangeable. Comparez :
Get-Process | Sort-Object -Property WS -Descending | Select-Object -First 3
avec
Get-Process | Select-Object -First 3 | Sort-Object -Property WS -Descending
La première version trie tous les processus puis garde les 3 plus gros. La seconde prend 3 processus au hasard (les 3 premiers renvoyés par Get-Process, sans logique de tri) puis les trie entre eux — ce qui ne donne presque jamais le résultat souhaité. Comme sur une vraie chaîne de montage : inverser deux postes change complètement la pièce finale.
Le pipeline n’est pas qu’une astuce de syntaxe pour raccourcir l’écriture : c’est la colonne vertébrale de PowerShell. La quasi-totalité des scripts de cette formation, y compris ceux que vous écrirez à la section 5, reposeront sur cette même logique : des cmdlets simples, enchaînées dans le bon ordre.
Dans la prochaine leçon, on détaille les trois postes de tri les plus utilisés au quotidien : Where-Object, Sort-Object et Select-Object.