Comment écrire un script PowerShell ?
Qu'avons-nous dans la boîte ?
PowerShell est un puissant langage de scripting créé par Microsoft que l’on peut utiliser pour automatiser des tâches ou effectuer l’administration de serveurs ou postes de travail Windows. Depuis quelques années, PowerShell est également disponible pour Linux et macOS. Voici quelques informations utiles à connaître pour écrire un script PowerShell.
En complément de cet article, pour apprendre PowerShell, je vous recommande vivement de lire ce cours gratuit proposé par IT-Connect :
1. Les bases pour écrire un script PowerShell
PowerShell est un langage objet qui s’appuie sur un ensemble de commandes et d’instructions. Les commandes sont appelées « cmdlets », que l’on prononce « commandlettes« . Il en existe plusieurs milliers, notamment parce que PowerShell peut gérer Windows, mais aussi les différents rôles de Windows Server, les services Azure et Microsoft 365, et plus encore. L’ajout de nouvelles commandes passe par l’installation de modules, ces derniers étant référencés sur le site PowerShell Gallery.
Chaque cmdlet suit une convention de nommage stricte puisque le nom est constitué d’un verbe approuvé suivi d’un nom. Les deux termes sont séparés par un tiret. Par exemple, la cmdlet Get-Process affiche tous les processus en cours d’exécution sur votre ordinateur. Nous pourrions presque traduire ce nom de cmdlet : Get = Obtenir, et Process = Processus, soit « Obtenir les processus« .
Chaque cmdlet contient un ensemble de paramètres, c’est-à-dire des options pour agir sur le comportement de la commande que l’on souhaite exécuter. Par exemple, le cmdlet New-Item sert à créer de nouveaux éléments, notamment des fichiers et des dossiers. Il prend en charge plusieurs paramètres tels que -Path pour préciser le chemin du dossier ou du fichier à créer, ainsi que -ItemType pour préciser le type d’élément à créer.
La commande ci-dessous, que vous pouvez exécuter dans une console PowerShell, sert à créer le dossier C:\Demo\MonNouveauDossier.
New-Item -Path 'C:\Demo\MonNouveauDossier' -ItemType Directory
Une autre notion à connaître, c’est le pipeline. Indispensable, le pipeline permet de passer les résultats d’un cmdlet à un autre. Le cmdlet Get-LocalUser sert à obtenir la liste de tous les utilisateurs présents sur la machine locale. Comment faire si l’on souhaite récupérer uniquement les utilisateurs activés ? Nous allons appliquer un filtre avec le cmdlet Where-Object qui va venir se positionner juste après le pipeline. Dans le cas présent, le filtre est effectué sur la propriété Enabled.
Voici la commande finale :
Get-LocalUser | Where-Object { $_.Enabled -eq $true }
Dans PowerShell, les commandes retournent des objets et chaque objet disposent d’un ensemble de propriétés, c’est-à-dire de caractéristiques. Chaque objet est aussi associé à des méthodes, c’est-à-dire des actions que l’on peut lui appliquer. Si l’on prend l’exemple d’un ordinateur, une propriété pourrait être le modèle de CPU, le modèle de RAM, la puissance de l’alimentation, etc… Et les méthodes pourraient être différentes actions : démarrer l’ordinateur, effectuer un reset, etc…
PowerShell est un langage très riche qui prend en charge de nombreuses instructions pour intégrer des boucles (For, ForEach, Do-While, etc.), des structures conditionnelles (If, If Else, Switch, etc.), et bien plus… Le script PowerShell suivant sert à vérifier s’il reste plus de 10 Go disponible sur le volume « C » de la machine Windows.
$espaceDisque = Get-PSDrive C
if ($espaceDisque.Free -lt 10GB) {
Write-Warning "Espace disque insuffisant sur le lecteur C:"
Write-Host "Espace libre: $($espaceDisque.Free)"
}
Dans l’exemple ci-dessus, nous utilisons une variable nommée « $espaceDisque » qui sert à stocker le résultat d’une commande. En PowerShell, vous l’aurez compris, il suffit d’indiquer un « $ » suivi d’un nom pour déclarer une variable. Celle-ci peut être utilisée pour stocker un objet, un tableau, un nombre, une chaine de caractères, etc… Selon les besoins. Le fait d’appeler la variable par son nom permet de lire son contenu et d’accéder à l’information qu’elle stocke.
Pour obtenir de l’aide en PowerShell, vous pouvez utiliser les cmdlets suivants : Get-Help et Get-Member.
2. Quel logiciel utiliser pour coder en PowerShell ?
Pour coder en PowerShell, évitez d’utiliser des applications basiques comme Bloc-notes et Notepad++. Je vous recommande d’utiliser Windows PowerShell ISE, un outil intégré à Windows et Windows Server, ou Visual Studio Code avec PowerShell. Il s’agit de deux éditeurs de code qui prennent en charge pleinement PowerShell, avec un avantage quand même pour VSCode, parce qu’il supporte les dernières versions de PowerShell.
Pour l’administration courante, c’est-à-dire l’exécution de commandes ou de scripts prêts à l’emploi, vous pouvez utiliser la console PowerShell ou l’application Windows Terminal.
Sachez qu’un script PowerShell est représenté par un fichier avec l’extension « .ps1 ». Cette extension n’a aucun lien avec la version de PowerShell utilisée.
3. Quelques bonnes pratiques pour coder en PowerShell
Voici quelques bonnes pratiques pour coder en PowerShell :
1. Utilisez des noms de variables descriptifs : choisissez des noms qui décrivent clairement l’usage de la variable pour faciliter la compréhension du code. Évitez les noms du style « $a ».
2. Commentez votre code : ajoutez des commentaires pour expliquer la logique de votre script PowerShell, cela aidera les autres et vous-même à comprendre le code lorsque vous y reviendrez plus tard…
3. Gérez les erreurs : utilisez l’instruction « try-catch » pour gérer les exceptions et fournir des messages d’erreur clairs pour faciliter le debug. Ceci permettra aussi d’agir en fonction d’une erreur : « si telle erreur se produit, alors on effectue telle action« .
4. N’utilisez pas d’alias dans les scripts : les alias peuvent être pratiques dans la console, mais ils peuvent rendre le code moins lisible. Utilisez les noms complets des cmdlets dans vos scripts. La liste des alias peut être consultée avec « Get-Alias ».
5. Indentez votre code : indentez votre code à l’aide de la touche « Tabulation » pour le rendre plus lisible
6. Testez votre code : Testez vos scripts dans différents environnements avant de les exécuter en production. L’utilisation de « -WhatIf » peut être intéressant dans ce but.
En complément, vous pouvez utiliser le module PSScriptAnalyzer pour analyser votre script PowerShell et voir s’il respecte les bonnes pratiques. Ce module est inclus à Visual Studio Code est il va analyser votre script PowerShell en temps réel.
4. Conclusion
Grâce à la lecture de cet article de la boîte à tutoriels informatique, vous disposez d’informations utiles pour commencer à apprendre à écrire un script PowerShell. De nombreuses ressources sont disponibles sur Internet, et la documentation de Microsoft est d’une aide précieuse même après plusieurs années à utiliser PowerShell.
Posez vos questions en commentaire et partagez vos astuces si vous voulez !