Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

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