15/11/2024

Analysez votre code PowerShell avec PSScriptAnalyzer

I. Présentation

Vous cherchez à vérifier si votre script PowerShell respecte les bonnes pratiques ? Vous devriez vous intéresser au module "PSScriptAnalyser" puisqu'il a pour objectif de vérifier si votre code respecte certaines règles d'écriture et bonnes pratiques.

Avant de lire la suite de ce chapitre, sachez que vous pouvez installer ce module avec cette commande :

Install-Module -Name PSScriptAnalyzer

Vous devez savoir également que PSScriptAnalyzer est inclus dans l'extension "PowerShell" de Visual Studio Code, ce qui signifie que chaque script PowerShell édité avec cet éditeur de code sera analysé par ce module. Néanmoins, vous pouvez directement l'utiliser depuis une console PowerShell pour lui demander d'analyser un script qui n'est pas nécessairement en cours d'exécution.

II. Les règles de PSScriptAnalyzer

Le module PSScriptAnalyzer effectue une vérification statique de votre code. Il contient un ensemble de règles qui vont permettre d'évaluer la qualité du code PowerShell. Ses règles sont définies par l'équipe PowerShell de chez Microsoft, mais également grâce à la communauté PowerShell.

Si vous souhaitez obtenir une liste exhaustive des règles de vérification définies par défaut, exécutez cette commande :

Get-ScriptAnalyzerRule

Cette commande retourne une liste de règles. 70, au total, pour être précis. Il y a 63 règles définies pour PowerShell en lui-même, et 7 règles définies pour PowerShell DSC, une solution de gestion des configurations basées sur PowerShell.

Voici un aperçu du résultat obtenu :

Liste des règles PSScriptAnalyzer

Ainsi que quelques exemples de règles :

  • PSAvoidUsingCmdletAliases : éviter d'utiliser des alias globaux, afin de prioriser l'utilisation des noms complets des cmdlets.
  • PSAvoidExclaimOperator : éviter d'utiliser le caractère "!" pour la négation, afin de prioriser l'utilisation de "-not".
  • PSUseCmdletCorrectly : appeler les cmdlets PowerShell en précisant bien les noms des paramètres obligatoires.
  • PSUseApprovedVerbs : vérifier que tous les cmdlets utilisés ont bien un nom qui contient un verbe approuvé.
  • PSProvideCommentHelp : ajouter de l'aide au sein des scripts PowerShell, comme nous l'avons vu dans le chapitre dédié à l'écriture des commentaires.
  • PSAvoidUsingComputerNameHardcoded : le paramètre "ComputerName" d'un cmdlet ne doit pas être codé en dur, car il expose des informations sensibles sur le système.
  • PSUseConsistentIndentation : chaque bloc de déclaration doit avoir une indentation cohérente.
  • PSPlaceCloseBrace : chaque accolade fermante doit être placée sur une nouvelle ligne.
  • Etc....

Ce module va également vérifier l'indentation de votre code et la syntaxe dans son ensemble.

Sur l'image précédente, vous pourrez constater que chaque règle est associée à un niveau de sévérité (Information, Warning, Error). Pour afficher toutes les règles associées à la sévérité de type "Error", utilisez cette syntaxe :

Get-ScriptAnalyzerRule -Severity Error

Vous pouvez suivre la même logique pour les autres sévérités.

III. Analyser un script avec PSScriptAnalyzer

Dans la suite de ce chapitre, nous allons effectuer l'analyse d'un script avec PSScriptAnalyzer. Le script que nous allons utiliser contient volontairement un ensemble d'erreurs de syntaxe, ainsi, il ne respecte pas les bonnes pratiques pour plusieurs raisons.

Voici le code que nous allons analyser et qui est contenu dans le fichier "C:\PS\ScriptDemo.ps1".

# Lister le contenu du répertoire "C:\Windows"
ls "C:\Windows"

# Tester l'existence du chemin "C:\Windows\"
if(-not(Test-Path "C:\Windows")){
   Write-Output "Ce chemin n'existe pas"    
}

Remarque : nous n'avons pas encore étudié certaines notions utilisées dans ce bout de code, mais ce sera fait dans la suite de ce cours.

Désormais, nous allons analyser ce script avec PSScriptAnalyzer :

Invoke-ScriptAnalyzer -Path "C:\Ps\ScriptDemo.ps1"

La commande retourne deux messages :

  • L'utilisation d'un alias sur la ligne 2. En effet, j'ai utilisé "ls" qui est un alias de "Get-ChildItem", ce qui n'est pas recommandé.
  • La présence d'espace à la fin de la ligne 6. En effet, j'ai intégré volontairement des espaces à la suite de la commande "Write-Output".

Désormais, il va falloir éditer le script pour apporter des modifications à la suite de cette analyse. Une fois les modifications effectuées, il suffit de relancer la commande précédente. Sachez qu'il y a un paramètre nommé "Fix" que l'on peut utiliser avec le cmdlet "Invoke-ScriptAnalyzer" et qui sert à effectuer les corrections à notre place, mais je vous le déconseille. Parfois, il a tendance à "casser" le formatage du script (notamment l'indentation).

Pour personnaliser le comportement de PSScriptAnalyzer, vous pouvez créer vos propres règles, mais aussi inclure ou exclure des règles en utilisant les paramètres "IncludeRule" et "ExcludeRule" suivi du nom ou des noms de règles.

Au-delà d'utiliser le script "ScriptDemo.ps1", vous pouvez exécuter la commande "Invoke-ScriptAnalyzer" sur n'importe quel script téléchargé à partir d'Internet.

Comme je l'évoquais en introduction, PSScriptAnalyzer est pris en charge nativement dans Visual Studio Code. Ainsi, si nous utilisons un alias dans un script, ce dernier est immédiatement mis en évidence et VSCode, par l'intermédiaire de PSScriptAnalyzer, nous indique qu'il est déconseillé d'utiliser un alias.

Analyser un script PowerShell - Via VSCode

IV. Conclusion

PSScriptAnalyzer est un module PowerShell très pratique et son intégration à Visual Studio Code est un gros plus. Quand vous écrivez un script, vous pouvez prendre l'habitude de le vérifier avec ce module pour voir s'il correspond aux bonnes pratiques les plus répandues.

Si vous souhaitez lire d'autres exemples, vous pouvez lire ce précédent article disponible sur IT-Connect :


livre pour apprendre PowerShell
author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

1 commentaire sur “Analysez votre code PowerShell avec PSScriptAnalyzer

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.