Les variables automatiques
Sommaire
I. Présentation
Après avoir étudié la notion de variable et appris à créer nos propres variables, nous allons évoquer les variables automatiques. En effet, dans PowerShell, en plus des variables que vous créez vous-même, il existe les variables automatiques, créées et gérées par PowerShell lui-même. Ces variables fournissent des informations utiles sur l'état actuel de votre session PowerShell et sont précieuses lors de l'écriture d'un script PowerShell. Vous pouvez consulter ces variables, mais vous ne pouvez pas les modifier.
Dans ce chapitre, nous allons explorer certaines de ces variables automatiques et voir comment elles peuvent être utilisées.
II. La variable $_
La variable "$_" est probablement la plus connue et la plus utile des variables automatiques. Elle représente l'objet actuel dans le pipeline. Lorsque nous utilisons une boucle, par exemple "ForEach-Object", nous utilisons cette variable. C'est également le cas lors de la création d'un filtre avec "Where-Object". À chaque fois, "$_" représente l'objet actuel sur lequel la boucle est en train de travailler.
Voici un exemple permettant d'obtenir la liste de tous les utilisateurs locaux activés sur la machine locale :
Get-LocalUser | Where-Object { $_.Enabled -eq "True" }
Le fait d'indiquer "$_.Enabled" permet d'appliquer le filtre sur la propriété "Enabled" de chaque objet, c'est-à-dire chaque utilisateur qui sera traité. Vous l'aurez surement deviné : le fait d'utiliser "$_" permet de sélectionner tout l'objet, tandis que "$_.<nom de propriété>" permet de sélectionner uniquement une propriété.
II. Les variables $PSVersionTable et $PSHOME
La variable "$PSVersionTable" contient des informations sur la version de PowerShell que vous utilisez, y compris la version principale, mineure et la révision. En complément, la variable "$PSHOME" contient le chemin vers le répertoire où PowerShell est installé.
Vous pouvez essayer ces deux variables :
# Affiche la version de PowerShell
Write-Host $PSVersionTable.PSVersion
# Affiche le chemin d'installation de PowerShell
Write-Host $PSHOME
Ce qui donne :
III. La variable $Error
La variable "$Error" contient une liste des dernières erreurs qui se sont produites dans la session PowerShell. Elle est très pratique pour obtenir la liste des erreurs faisant suite à l'exécution d'un script, mais aussi pour la gestion des erreurs. Cette variable automatique correspond à un tableau (la première valeur d'un tableau est associée à l'index 0). La première erreur, c'est-à-dire la plus récente, est accessible via "$Error[0]", la seconde via "$Error[1]", etc.
Lorsque nous ouvrons une nouvelle console PowerShell, cette variable est vide. Dès qu'une erreur se produit, celle-ci est ajoutée au tableau "$Error". L'exemple ci-dessous le montre explicitement :
IV. La variable $?
La variable "$?", à ne pas confondre avec "$_", est une autre variable automatique essentielle dans PowerShell. Elle contient le statut de la dernière opération (commande exécutée). Si la dernière commande s'est exécutée avec succès, "$?" sera égale à "True", sinon, en cas d'échec, "$?" sera "False". Cette variable automatique est de type booléen.
C'est particulièrement utile pour vérifier si une opération s'est déroulée comme prévu et pour gérer les erreurs. Ceci permet d'exécuter une action uniquement si l'action précédente a réussi.
# Récupérer l'état d'un processus inexistant (pour générer un échec)
Get-Process -Name "ProcessusInexistant"
# Vérifie si la commande a réussi
if ($?) {
Write-Host "La commande a été exécutée avec succès "
} else {
Write-Host "La commande a échouée"
}
Dans cet exemple, la commande "Get-Process" tentera de trouver un processus qui n'existe pas, ce qui échouera. Par conséquent, la valeur de "$?" sera "False" et la phrase "La commande a échoué" sera affiché.
V. Les variables $true, $false et $null
Ces variables représentent les valeurs booléennes vrai ($true) et faux ($false), ainsi que la valeur nulle ($null). Elles sont souvent utilisées dans les structures conditionnelles, que nous étudierons par la suite (if, else).
Voici tout de même un exemple :
if ($MaVariable -eq $null) {
Write-Host "La variable est nulle"
}
Dans l'exemple ci-dessus, la variable "$MaVariable" ne contient aucune valeur, donc elle est considérée comme nulle.
VI. La variable $PSScriptRoot
La variable "$PSScriptRoot" est une variable automatique qui contient le chemin du répertoire à partir duquel le script actuel est exécuté. Cette variable est très pratique lorsque vous avez besoin de faire référence à d'autres fichiers ou scripts qui se trouvent dans le même répertoire que le script principal. En effet, vous ne connaissez pas à l'avance le répertoire dans lequel sera stocké le script (notamment pour les scripts que vous allez partager), donc la variable "$PSScriptRoot" vous l'indiquera.
Supposons, par exemple, que vous ayez un script PowerShell qui doit lire un fichier texte situé dans le même répertoire que le fichier de script en lui-même. Vous pouvez utiliser la variable "$PSScriptRoot" pour construire le chemin du fichier :
# Construire le chemin vers le fichier
$FichierChemin = $PSScriptRoot + "\" + "MonFichier.txt"
# Lire le contenu du fichier
$FichierContenu = Get-Content -Path $FichierChemin
Ceci implique que ce bout de code soit exécuté par l'intermédiaire d'un script PS1, sinon la variable "$PSScriptRoot" sera vide, car il sera impossible de pointer vers un fichier de script. Si le script est stocké dans le répertoire "C:\PS", alors la variable "$PSScriptRoot" sera égale à "C:\PS". Si l'on déplace le script, alors le chemin s'adaptera automatiquement.
En complément, sachez que la variable "$PSCommandPath" contient le chemin complet vers le répertoire ainsi que le nom du script. Si le script "Demo.ps1" est stocké dans "C:\PS", alors cette variable aura pour valeur "C:\PS\Demo.ps1".
VII. Les variables $IsWindows, $IsLinux et $IsMacOS
Depuis PowerShell 7.0, le langage PowerShell prend en charge trois variables automatiques supplémentaires : "$IsWindows", "$IsLinux" et "$IsMacOS". Elles sont très utiles pour déterminer le système d'exploitation (OS) sur lequel est exécuté PowerShell. Comme leurs noms l'indiquent, ces variables retourneront "True" (vrai) si PowerShell est en cours d'exécution sur l'OS correspondant, et sinon la valeur "False" est retournée.
Autrement dit, si PowerShell est exécuté sur Windows, la variable $IsWindows sera égale à "True" tandis que les deux autres variables seront égales à "False". La mécanique est la même avec "$IsLinux" pour Linux et "$IsMacOS" pour MacOS. Par exemple, ceci peut vous permettre d'avoir un seul script qui s'adapte d'un système à un autre : les chemins d'accès étant différents entre ces OS.
VIII. Conclusion
Comme nous venons de le voir, chaque variable automatique joue un rôle très différent. Les variables automatiques de PowerShell jouent un rôle précieux, car elles offrent un moyen pratique d'accéder à diverses informations. En les utilisant judicieusement, vous pouvez rendre vos scripts plus souples, notamment pour s'adapter à l'environnement d'exécution. Il en existe d'autres, parmi lesquelles les variables suivantes :
- $$ : contient la valeur retournée par la dernière commande PowerShell exécutée
- $Home : contient le chemin vers le répertoire de profil de l'utilisateur actuel
- $Host : contient quelques informations sur le système hôte
- $PSCulture : contient la langue utilisée par l'utilisateur (fr-FR, sur un système en français)
- $PID : contient le numéro de processus de la session PowerShell actuelle
- $PROFILE : contient le chemin vers le fichier de profil PowerShell de l'utilisateur actuel