Les bases de la syntaxe
Introduction
Windows PowerShell est, nous l’avons brièvement évoqué dans l’introduction de cet ouvrage, un environnement en ligne de commandes et un langage de script. À ce titre, comme il s’adresse essentiellement à des administrateurs, il se doit de présenter un certain niveau d’abstraction qui le caractérise d’ailleurs très fortement - la présence même d’un environnement en ligne de commandes et d’un langage de script a été, il faut le souligner, spécialement pensée pour ceux que l’on nomme les IT Pros (principalement les administrateurs).
Dans les modes d’utilisation qui sont possibles avec Windows PowerShell, un mode fondamental est celui de l’utilisation de lignes de commandes, au sens large du terme. En effet, une ligne de commande est composée d’un certain nombre d’éléments. Ces éléments peuvent être entre autres des commandes, des paramètres, des blocs de scripts ou même des alias. Ce chapitre nous permettra de mieux saisir ce que recouvrent les différentes parties constitutives d’une même ligne de commande.
Les commandes
Le concept de « commande » a plusieurs significations dans l’univers de Windows PowerShell. En réalité, ce concept sous-tend quatre acceptions listées dans le tableau ci-dessous :
Type de commande |
Cmdlet |
Fonction |
Script |
Commande native |
Tableau 1-1. Types de commande existant dans Windows PowerShell
Chacun de ces types de commande revêt une définition bien particulière. Il est donc important de les comprendre.
1. Les cmdlets
Une cmdlet propose un haut niveau d’abstraction permettant d’exécuter une tâche particulière. Elle est structurée, d’une manière générale, à partir d’une classe .NET concentrant tous ses éléments (paramètres, valeurs attendues, objets retournés, etc.). Toutefois, à partir de la version 2 de Windows PowerShell, une cmdlet n’est pas forcément écrite à partir de langages comme C# ou VB.Net, mais aussi à partir du langage PowerShell lui-même ; cette information est importante, car les perspectives sont dès lors élargies.
Aussi, une cmdlet propose un système de nommage basé sur le modèle « Verbe-Nom », où :
-
le verbe indique quelle action doit être menée ;
-
le nom indique le type d’objet sur lequel l’action demandée doit être exécutée.
Pour illustrer notre propos, prenons la cmdlet Get-Verb. Celle-ci, est composée du verbe Get, signifiant « obtenir », ainsi que du nom Verb signifiant « Verbe ». Si l’on essaye de comprendre la signification de ces deux mots, nous obtenons « collecter les verbes utilisés dans Windows PowerShell ». En exécutant cette cmdlet à l’aide d’une console, voici ce que l’on obtient :
PS> get-verb
Verb Group
---- -----
Add Common
Clear Common
Close Common
Copy Common
Enter Common
Exit ...
Les paramètres
Les types de commandes que nous venons d’évoquer ont des éléments en commun. Parmi ceux-ci se trouve la notion de paramètre. En effet, les cmdlets, fonctions et scripts autorisent l’entrée de valeurs au moyen de ces paramètres. De cette façon, ils permettent un ajustement des commandes sur le plan du comportement.
Syntaxe d’un paramètre
(1) -<nom_paramètre> (2) <valeur_paramètre> (3)
La présence d’un trait d’union - (1) indique à Windows PowerShell que le mot qui suit doit être traité en tant que nom de paramètre (2). Ce paramètre peut aussi avoir une valeur attendue (3).
Obtenir des informations à propos d’un paramètre passe essentiellement par la cmdlet Get-Help. Par exemple, listons les informations concernant les paramètres de la commande Get-Process :
PS> Get-Help Get-Process
NOM
Get-Process
RÉSUMÉ
Gets the processes that are running on the local computer or a remote
computer.
SYNTAXE
Get-Process [[-Name] <String[]>] [-ComputerName <String[]>]
[-FileVersionInfo] [-Module] [<CommonParameters>]
Get-Process [-ComputerName <String[]>] [-FileVersionInfo] [-Module]
-InputObject <Process[]> [<CommonParameters>]
Get-Process [-ComputerName <String[]>] [-FileVersionInfo] [-Module]
-Id <Int32[]> [<CommonParameters>]
Get-Process -Id <Int32[]> -IncludeUserName [<CommonParameters>]
Get-Process -IncludeUserName -InputObject <Process[]>
<CommonParameters>]
Get-Process [[-Name] <String[]>] -IncludeUserName
[<CommonParameters>]
DESCRIPTION
The Get-Process cmdlet gets the processes on a local or remote
computer.
Without parameters, Get-Process gets all of the processes on the
local computer. You can also specify a particular process by process name
or process ID (PID) or pass a process object...
Les blocs de script
Windows PowerShell, en tant que langage de script et environnement en ligne de commande, a introduit depuis la version 1 la présence de ce que l’on nomme « bloc de script » comme symbole fort de son écosystème.
1. Un bloc de script comme expression lambda
Un bloc de script n’est rien d’autre qu’une expression lambda (ou fonction qui n’a pas de nom), comme le montre la syntaxe suivante.
Syntaxe d’un bloc de script
{ <liste d'instructions> (1) } (2)
Un ensemble d’instructions (1) est exécuté par Windows PowerShell et est encapsulé par des accolades (2). Tout comme les commandes existantes, les blocs de script peuvent retourner des valeurs ayant différentes formes, et donc exploitables de plusieurs façons.
En outre, avec Windows PowerShell, un bloc de script a la possibilité d’avoir des paramètres, ce qui constitue un autre point commun avec les fonctions.
Bloc de script avec paramètres
{
param (1) ($param1, $param2, $param3) (2)
<liste d'instructions> (3)
}
Le mot-clé param (1) permet précisément l’ajout de paramètres (2) au bloc de script. La liste d’instructions (3) qui suit récupère naturellement la valeur de chacun des paramètres au sein de leur propre code.
2. Apprendre à utiliser un bloc de script
En tant que principe de base, tout type de commande est potentiellement intégrable à un bloc de script :
PS> & { Get-Process }
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
110 4 14876 13400 40 948 audiodg
55 3 1632 4824 43 0,06 2404 conhost
445 ...
Les alias
Les noms de commandes peuvent être plus ou moins longs, et en cas d’une utilisation quotidienne de Windows PowerShell il peut parfois exister une certaine forme de répétition inhérente à l’utilisation de mêmes commandes. Dans ce cas, certains langages de script permettent de créer ce que l’on appelle des alias. Ceux-ci offrent un gain de temps non négligeable dans un cadre quotidien.
1. Un alias est un raccourci
Un alias est un nom alternatif lié à une commande. Il s’agit d’un surnom attribué à une commande dans le but de gagner du temps lors de son appel. Windows PowerShell inclut tout un ensemble d’alias prêts à être utilisés. Pour les lister, utilisons la cmdlet Get-Alias :
PS> Get-Alias
CommandType Name
----------- ----
Alias % -> ForEach-Object
Alias ? -> Where-Object
Alias ac -> Add-Content
Alias asnp -> Add-PSSnapin
Alias cat -> Get-Content
Alias cd -> Set-Location
Alias chdir -> Set-Location
Alias clc -> Clear-Content
Alias clear -> Clear-Host
Alias clhy -> Clear-History
Alias cli -> Clear-Item
Alias clp -> Clear-ItemProperty
Alias cls -> Clear-Host
Alias clv -> Clear-Variable
Alias cnsn -> Connect-PSSession
Alias compare -> Compare-Object ...