15/11/2024

L’utilisation du pipeline avec PowerShell

I. Présentation

Avec PowerShell, nous sommes amenés à manipuler différents caractères spéciaux lors de la rédaction de scripts, notamment les parenthèses, les accolades, etc... Parmi tous ces caractères, il y en a un qui mérite une attention particulière : le pipeline, que l'on appelle aussi barre verticale en français. Dans ce chapitre, nous allons étudier son fonctionnement et son intérêt.

Le pipeline, que l'on peut abréger en pipe, fait référence au caractère spécial présent sur la touche "6" d'un clavier AZERTY et que l'on peut insérer en appuyant simultanément sur les touches "ALT-GR et 6".

Raccourci clavier pipeline powershell

II. À quoi sert le pipeline ?

Que ce soit dans un script PowerShell ou dans la console PowerShell, le caractère "|" va permettre d'effectuer un enchainement de commandes. D'ailleurs, ce caractère spécial a le même objectif avec d'autres interpréteurs de commandes, notamment avec Bash sous Linux.

Pour être plus précis, le pipeline va se positionner entre deux commandes : la sortie d'une première commande sera envoyée en entrée pour la seconde commande. Ceci peut même continuer avec une troisième commande, une quatrième commande, etc. Dans la majorité des situations, l'enchainement de deux ou trois commandes sera suffisant.

Le pipeline est très utile pour filtrer les données ou exécuter une action selon le résultat d'une première commande, etc.

Voici sa syntaxe :

<Première commande> | <Deuxième commande>
<Première commande> | <Deuxième commande> | <Troisième commande> | etc...

III. Prise en main du pipeline

Pour prendre en main le pipeline, nous allons nous amuser avec le cmdlet "Get-LocalUser". Il sert à obtenir la liste des utilisateurs locaux présents sur une machine Windows. D'ailleurs, vous pouvez l'exécuter sur une machine pour le tester.

Get-LocalUser

Nous pouvons constater que le résultat obtenu représente la liste de tous les utilisateurs, peu importe leur état. En effet, la propriété "Enabled" indique si le compte est activé ou désactivé sur la machine locale.

Get-LocalUser - Exemple - Liste des utilisateurs locaux

Comment faire pour filtrer ce résultat pour récupérer la liste des utilisateurs activés ? Bonne question. C'est là que le pipeline entre en jeu...

Actuellement, nous savons que si la propriété "Enabled" est égale à "True" le compte est activé. À l'inverse, si elle est égale à "False", le compte est désactivé. L'objectif va être de récupérer uniquement les comptes où "Enabled = True".

Nous allons devoir filtrer le résultat retourné par le cmdlet "Get-LocalUser". Pour cela, nous allons transmettre le résultat de cette commande à une autre commande par l'intermédiaire du pipeline. L'idée est la suivante :

Get-LocalUser | <Deuxième commande>

Cette seconde commande s'appelle : "Where-Object". Elle va nous permettre de filtrer le résultat de la première commande, qui lui sera transmis en entrée grâce au pipeline. Ce qui va nous donner ceci :

Get-LocalUser | Where-Object { <Filtre> }

Ainsi, si nous ajoutons notre condition en tant que filtre, cela donne la commande suivante :

Get-LocalUser | Where-Object { $_.Enabled -eq "True" }

Voici le résultat retourné par cette commande :

Prise en main du pipeline PowerShell avec Get-LocalUser

Nous obtenons bien le résultat attendu : cette commande filtrée retourne la liste des comptes utilisateurs activés. Il est à noter que "$_" correspond à une variable automatique qui correspond au résultat retourné par la précédente commande, ici "Get-LocalUser". Le fait d'écrire "$_.Enabled" signifie que l'on sélectionne la propriété "Enabled" puisque c'est elle que l'on souhaite comparer afin de voir si elle est égale à "True" via l'opérateur de comparaison "-eq".

Cet exemple montre bien l'intérêt du pipeline et il nous permet de comprendre également que le traitement est effectué de la gauche vers la droite, comme notre sens de lecture habituel.

Nous pourrions aller plus loin avec l'ajout du troisième commande permettant d'exporter la liste des comptes dans un fichier texte. Pour effectuer cet export très basique, mais qui peut s'appliquer à d'autres situations, nous allons utiliser le cmdlet "Out-File". Il suffit de préciser le chemin et le nom du fichier de sortie.

Get-LocalUser | Where-Object { $_.Enabled -eq "True" } | Out-File -FilePath "C:\TEMP\Utilisateurs.txt"

Voici le résultat obtenu en image :

PowerShell - Exemple Pipeline avec trois commandes

IV. Conclusion

Au quotidien, le pipeline est très pratique, que ce soit directement pour l'utilisation de la ligne de commande ou lors de la rédaction de scripts. Lorsqu'il est couplé à certains cmdlets comme "Where-Object", il offre des possibilités très intéressantes pour filtrer, trier ou exécuter des actions en fonction de résultats reçus en entrée.


livre pour apprendre PowerShell
author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.