Blog ENI : Toute la veille numérique !
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici

Le pipeline

Introduction

Lors de l’utilisation de commandes PowerShell ainsi que dans tout interpréteur de commandes, il est possible d’enchaîner des commandes les unes à la suite des autres grâce à ce que l’on appelle le pipeline.

Nous allons voir à quoi cela ressemble et comment l’utiliser.

Principe et fonctionnement du pipeline

1. Qu’est-ce que le pipeline ?

Dans le langage courant, le pipeline correspond à un gros tube permettant de transporter des matières fluides comme des liquides ou des gaz. Bien entendu, nous ne transportons aucun fluide avec PowerShell. Toutefois, le principe de transport se retrouve dans le concept du pipeline avec PowerShell. Comme dans tous les interpréteurs, il est possible d’invoquer plusieurs commandes simultanément dans la même ligne.

C’est donc dans cette optique que le concept de pipeline et de transport mentionné juste avant prend tout son sens. En effet, le pipeline en PowerShell permettra de transporter non pas du gaz mais le résultat, la sortie des commandes les unes avec les autres.

2. Où se trouve le pipeline ?

Si dans la vie de tous les jours le pipeline ressemble à un gros tube, il correspond au caractère "|" sur les claviers des ordinateurs. Celui-ci peut être saisi en utilisant la combinaison de touches [Alt Gr] 6. Le pipeline peut également être appelé « pipe ».

Ci-dessous, la localisation du caractère pipeline « | » sur un clavier :

images/12RI01.png

3. L’enchaînement des commandes

Comme mentionné précédemment, le pipeline permet d’enchaîner des commandes les unes avec les autres. C’est...

Comprendre le pipeline en exemple

Pour visualiser ce concept, nous utiliserons les cmdlets permettant de gérer les services Windows. Comme mentionné dans le chapitre PowerShell, un langage de cmdlets, nous pouvons lister les différentes cmdlets permettant de gérer les services à l’aide de la cmdlet Get-Command suivi d’un mot-clé, ici *service* :

Get-Command "*service*" -CommandType cmdlet 
 
Name 
---- 
Get-Service 
New-Service 
Restart-Service 
Resume-Service 
Set-Service 
Start-Service 
Stop-Service 
Suspend-Service 

Notre exemple permettra de redémarrer un service spécifique, ici le service Intune, plus précisément IntuneManagementExtension.

Nous utiliserons pour cela deux cmdlets :

  • Get-Service : pour lister tous les services.

  • Restart-Service : pour redémarrer un service précis.

La première étape sera de cibler le bon service :

Get-Service IntuneManagementExtension 
images/12RI02.png

Cela peut également s’utiliser avec la cmdlet Where-Object :

Get-Service | where {$_.Name -eq "IntuneManagementExtension"} 

Where est un alias de Where-Object.

Dans notre commande ci-dessous, nous avons :

  • une cmdlet Get-Service,

  • notre pipeline,

  • une cmdlet Where-Object.

Dans cet exemple le pipeline fonctionne comme ci-dessous :

  • Get-Service : liste les différents...

Schématiser un pipeline

Reprenons notre exemple précédent et ajoutons un autre pipeline pour créer un fichier qui contiendra l’ensemble des services qui ont la valeur Stopped dans la colonne Status.

Ci-dessous la commande :

PS C:\> Get-Service | where-object {$_.Status -eq "Stopped"} |  
Out-File -FilePath ./ServicesStopped.txt 

Essayons tous simplement de représenter les flux d’informations dans un schéma.

images/12RI03.png

Analysons ce pipeline :

1. Nous obtenons d’abord tous les services présents dans le système avec la cmdlet Get-Service.

2. Ensuite, l’ensemble des services collectés sous forme de liste d’objets est envoyé à la cmdlet Where-Object, qui ne sélectionne que les services dont la propriété Status a la valeur Stopped.

3. Après filtrage, le résultat final est reçu et traité par la cmdlet Out-File, qui l’enregistre dans un fichier texte.

La liaison des paramètres et objets

1. Principe

PowerShell redirige les objets envoyés au travers du pipeline depuis une cmdlet vers une autre. Ainsi, un objet transmis depuis une cmdlet 1 utilisera un paramètre associé à une cmdlet 2 qui recevra l’objet concerné.

2. Connaître les paramètres utilisant le pipeline

PowerShell connaît les paramètres acceptant le pipeline, c’est-à-dire pouvant être transmis à une autre commande.

Pour qu’une cmdlet accepte des entrées, elle doit remplir les critères suivants :

  • Au moins un de ses paramètres doit accepter une entrée en provenance du pipeline.

  • Si un paramètre accepte une entrée en provenance du pipeline, il doit explicitement accepter le type d’objet envoyé ou alors un type d’objet pouvant être converti.

  • Le paramètre ne doit pas être utilisé au préalable dans la cmdlet.

Pour lister les paramètres d’une cmdlet acceptant le pipeline, nous pouvons utiliser la cmdlet Get-Help en ajoutant le paramètre -Full.

Nous utiliserons Get-Help sur la cmdlet Get-Service.

Il est également possible d’utiliser la cmdlet Get-Help en utilisant le paramètre -Parameter suivi d’un astérisque pour préciser de tout lister.

Get-Help Get-Service -Parameter * 
 
-Include <System.String[]> ...