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 3Lu à 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 3avec
Get-Process | Select-Object -First 3 | Sort-Object -Property WS -DescendingLa 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.