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

PowerShell, un langage de cmdlets

Qu’est-ce qu’une commande ?

Avant de parler des cmdlets, définissons d’abord ce qu’est une commande.

Une commande n’est pas un terme propre à PowerShell mais à tous types de langages informatiques. Une commande correspond à une instruction saisie dans un script ou dans une invite de commandes.

Cette instruction, une fois saisie, permettra d’exécuter une ou plusieurs actions dans un ordre précis. Avec PowerShell, le mot « commande » possède plusieurs significations :

  • une cmdlet,

  • une fonction,

  • un script,

  • une commande Windows native (telle qu’une commande DOS).

Dans ce chapitre, nous nous concentrerons sur les cmdlets. Il y aura dans la suite du livre des chapitres dédiés aux scripts et fonctions.

Qu’est-ce qu’une cmdlet ?

Les cmdlets sont aussi appelées applet de commande, command-let ou command-applets.

Il n’existe pas de traduction officielle, mais nous les nommerons commandelettes en français en utilisant le terme cmdlets. Le terme cmdlet peut se séparer en deux :

  • « cmd » pour commande.

  • « lets » pour applets de commande.

Nous pouvons considérer que ce sont des petites commandes, la syntaxe d’une cmdlet étant simple, rapide et courte. Les cmdlets ont toujours la même structure et sont donc facilement reconnaissables. Elles sont toujours composées de la manière suivante : un verbe séparé d’un tiret puis un nom.

Que se passe-t-il derrière ?

1. Cmdlets et bibliothèques

Lors du démarrage d’une console PowerShell ou l’ouverture d’une session PowerShell (la session se ferme à la fermeture de la console PowerShell), différentes bibliothèques sont automatiquement chargées.

Il s’agit de bibliothèques au sens DLL (Dynamic Link Library). Cela permet de rendre l’exécution des cmdlets beaucoup plus rapide, car les bibliothèques correspondantes sont déjà chargées et intégrées dans la session courante.

2. Cmdlets et bibliothèques en exemples

Analysons cela en quelques exemples.

Pour chacune des cmdlets, nous allons vérifier le module et la DLL dans lesquels elle se trouve.

Cmdlet Get-Service

  • Module utilisé : Microsoft.PowerShell.Management

  • DLL utilisée : Microsoft.PowerShell.Commands.Management.dll

Ce module permet de gérer le système Windows avec PowerShell et comporte aussi les cmdlets suivantes : Add-Computer, Add-Content, Clear-Content, Clear-RecycleBin, Copy-Item, Get-ChildItem, Get-Content, Get-EventLog, Get-HotFix, Get-Item, Get-ItemProperty

Cmdlet ConvertTo-Csv

  • Module utilisé : Microsoft.PowerShell.Utility

  • DLL utilisée : Microsoft.PowerShell.Commands.Utility.dll

Ce module comporte des cmdlets permettant de gérer les fonctionnalités de base de PowerShell....

Syntaxe d’une cmdlet

1. La syntaxe Verbe + Nom

Une cmdlet a toujours la même syntaxe, ce qui rend son utilisation et sa compréhension relativement simple.

La syntaxe est un verbe + un nom (en anglais, Verb + Noun).

Le verbe et le nom seront séparés par un tiret : Verbe-Nom.

Pour résumer, les cmdlets respectent des règles de nommage bien précises. Le format qu’elles adoptent est de type Verbe-Nom.

  • Le verbe décrit le type d’action à mener.

  • Le nom décrit l’objet sur lequel nous voulons accomplir cette action.

Par exemple, la cmdlet Get-Service respecte parfaitement ce format.

  • Le verbe Get signifie « obtenir ».

  • Le nom Service signifie un objet ou une liste d’objets représentant les services. 

Cela signifie en clair : « lister un ou plusieurs objets représentant les services ». 

Prenons maintenant une autre cmdlet, permettant également de gérer les services, nommée Start-Service. La syntaxe et la traduction nous permettent de comprendre facilement ce que fait cette cmdlet :

  • Start (verbe) : démarrer.

  • Service (nom) : les services présents sur votre système.

Nous comprenons donc que cette cmdlet permettra de démarrer un service précis.

Ci-dessous la syntaxe de la cmdlet Get-Command en image :

images/RI08_modif.png

On peut donc, en croisant les verbes et les noms, se souvenir facilement de bon nombre de commandes.

Notez que les commandes, ainsi que leurs paramètres associés, peuvent s’écrire indifféremment en majuscules ou en minuscules, l’analyseur de syntaxe PowerShell n’étant absolument pas sensible à la casse sauf dans le cas de PowerShell sous mac OS ou Linux.

2. Qu’est-ce qu’un verbe ?

Un verbe a la même signification que dans le langage courant. Dans le langage PowerShell, il existe différents verbes tels que Get, Set, Add, Remove, Clear, Delete…

Une chose importante est que le verbe est toujours en anglais, il est donc important d’avoir quelques notions pour...

Get-command : lister les cmdlets

PowerShell possède de nombreuses cmdlets. Chacune d’elles permet d’effectuer une action particulière sur un élément particulier.

Nous savons que ces actions seront généralement d’obtenir des informations, d’ajouter, démarrer, copier, supprimer…

Il est parfois difficile de trouver la cmdlet pour ce que nous souhaitons faire, car il est évident qu’il est impossible de les connaître toutes lorsque nous débutons. 

Heureusement, PowerShell permet au travers d’une cmdlet de trouver celle que vous cherchez.

Il s’agit de la cmdlet Get-Command qui se traduit par « obtenir une commande ». Il suffira de saisir la cmdlet puis un mot-clé. Ci-dessous, quelques exemples :

  • Lister les cmdlets liées aux services :

Get-Command *service* 
Name 
---- 
Get-Service 
New-Service 
New-WebServiceProxy 
Restart-Service 
Resume-Service 
Set-Service 
Start-Service 
Stop-Service 
Suspend-Service 
  • Lister les cmdlets liées à la partie WMI :

PS C:\Users\damien.vanrobaeys> get-command *wmi* 
 
Name 
---- 
Get-WmiObject 
Invoke-WmiMethod 
Register-WmiEvent 
Remove-WmiObject 
Set-WmiInstance 
  • Lister les cmdlets contenant le mot « computer » :

PS C:\Users\damien.vanrobaeys>...

Les paramètres

Après avoir étudié ce qu’était une cmdlet et la syntaxe Verbe-Nom, il est important d’étudier un autre point étroitement lié aux cmdlets : les paramètres.

1. Qu’est-ce qu’un paramètre ?

Également appelés attributs ou arguments, les paramètres sont utilisés par des cmdlets, fonctions, modules, scripts… Ces différentes commandes vont donc s’appuyer sur ces paramètres pour s’exécuter.

Un paramètre permettra de passer du contenu à une cmdlet, fonction… Il s’agit d’une valeur d’entrée qui pourra agir, modifier le comportement de l’exécution d’une cmdlet. Cela permettra par exemple à un utilisateur de sélectionner des options ou saisir quelque chose tel que le nom d’une machine. La commande ira ensuite utiliser ces différents paramètres pour poursuivre son exécution. Le choix des paramètres pourra donc influencer l’exécution du code.

2. Syntaxe d’un paramètre

Un paramètre commence toujours par un tiret suivi du nom du paramètre.

images/08RI08.png

Un paramètre ne doit pas contenir d’espace. Il doit, par contre, y avoir un espace entre un paramètre et sa valeur.

3. Les types de paramètres

Il existe différents types de paramètres tels que :

  • chaîne de caractères,

  • booléen,

  • switch,

  • objet,

  • entier.

4. Lister les paramètres disponibles

Pour savoir quels sont les paramètres disponibles pour une cmdlet et comprendre comment les utiliser, la méthode recommandée est l’utilisation de l’aide PowerShell.

Davantage d’informations sur l’aide sont disponibles dans le chapitre L’aide PowerShell, un précieux allié.

Nous allons vérifier ci-dessous l’aide pour la commande Get-Service.

La partie syntaxe indique les différents paramètres disponibles pour la cmdlet concernée :

images/RI08_help01.png

Cela nous indique donc :

  • le nom du paramètre,

  • le type du paramètre (par exemple, -ComputerName est une chaîne de caractères). 

Pour obtenir encore davantage d’informations sur les paramètres, ajoutons maintenant le paramètre -Detailed à notre...

Les alias de cmdlets

Un alias de cmdlet est une version raccourcie de la cmdlet. L’utilisation d’un alias permet de gagner du temps dans l’écriture d’une commande car nous n’aurons pas à saisir la cmdlet en entier. Une cmdlet peut avoir plusieurs alias disponibles.

Ci-dessous, quelques exemples connus d’alias de cmdlet :

Cmdlet

Alias

Get-ChildItem

gci

Get-Item

gi

Get-Content

gc

Write-Output

write

Copy-Item

copy ou cp ou cpi

Get-Command

gcm

Il est possible de lister facilement tous les alias disponibles en PowerShell. Nous utiliserons pour cela la cmdlet Get-Alias :

images/08RI21.png

L’utilisation des alias est certes un gain de temps lors de l’écriture de votre code, mais il n’est pas recommandé de les utiliser. En effet, lors de l’écriture d’un script, il faut toujours penser à la personne qui va reprendre ce script, le lire, le modifier, l’améliorer.

Les alias peuvent rendre votre code illisible ou difficile à comprendre au premier regard. Il est par exemple plus aisé de comprendre immédiatement la commande Get-Content ou Copy-Item plutôt que gc ou cp. Il faudra donc préférer les cmdlets en toutes lettres plutôt que les alias.

Show-Command : visualiser une cmdlet et ses paramètres

Il existe une cmdlet très intéressante permettant d’afficher dans une interface graphique tous les paramètres disponibles pour une cmdlet avec des champs de saisie et des boutons pour les remplir. Cette cmdlet est Show-Command. Utilisons-la avec la cmdlet Copy-Item.

Show-Command Copy-Item 

Ci-dessous le résultat :

images/08RI22.png

Nous avons donc ici les différents paramètres disponibles avec cette cmdlet de manière visuelle avec la possibilité de remplir des zones de saisie ou de cocher des cases.

PowerShell et les modes d’analyse syntaxique

Lorsque nous saisissons quelque chose dans l’invite de commandes PowerShell, ce dernier l’analyse et l’interprète selon deux modes :

  • Mode expression

  • Mode commande

1. Analyse rapide pour comprendre

Lorsque vous saisissez une commande dans l’invite de commandes, PowerShell sépare chaque commande en différents segments nommés jetons.

Par exemple, PowerShell séparera la commande suivante en deux jetons, Write-Host et Bonjour, et va donc les interpréter chacune indépendamment.

Write-Host Bonjour 

Prenons l’exemple de la commande suivante :

5 * 5 

L’interprétation de PowerShell donnera comme résultat le chiffre 25.

images/08RI23.png

Il s’agit ici du mode expression.

Prenons maintenant la commande suivante :

Write-Host 5*5 

PowerShell interprétera le résultat comme une chaîne de caractères sans faire de calcul et donc ne retournera pas le chiffre 25 comme dans le mode expression. Ainsi, au lieu d’écrire 25, cela retournera 5*5.

images/08RI24.png

Il s’agit ici du mode commande.

2. Le mode expression

Pour comprendre le mode d’expression, il est intéressant de définir tout d’abord ce qu’est une expression.

Une expression correspond à une représentation de valeurs, une séquence d’opérateurs. Il y a différents types d’expressions...