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 :
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.
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 :
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 :
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 :
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.
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.
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...