Les documents contenus dans la réponse de @ o are sont une bonne source, quoique quelque peu tangentielle.
Si vous utilisez Visual Studio Code, qui est prévu pour remplacer le PowerShell ISE vieillissant, puis installez l' extension VS Code PowerShell , qui inclut plusieurs options de formatage qui étaient au moins partiellement basées sur le guide non officiel des meilleures pratiques et du style PowerShell . VS Code et l'extension PowerShell sont gérés par Microsoft, il est donc à peu près aussi officiel qu'un guide non officiel peut l'être.
Je ne suis pas d'accord avec tout ce qu'ils disent. Par exemple, je viens de PHP, Java, C # et SQL où des points-virgules sont attendus si ce n'est pas requis. Le code semble incorrect me sans eux, donc je les inclue. S'il y en avait un, #requires SemicolonTerminator
je l'activerais sur la plupart de mes scripts, donc je n'ai pas à me soucier de la coupure d'une ligne blanche. Je déteste échapper aux retours chariot et autres VB-ismes.
Les autres sont mon avis:
Utilisez le vrai nom ou l'alias de la cmdlet?
Soyez sans ambiguïté. N'utilisez jamais d'alias dans un script enregistré; même un alias par défaut. Rien n'empêche un utilisateur de modifier les alias par défaut. Il est plus sûr de supposer qu'ils ne sont pas immuables.
Spécifiez le nom du paramètre d'applet de commande en totalité ou seulement partiellement (dir -Recurse versus dir -r)
Encore une fois, soyez sans ambiguïté. Les noms de paramètres complets ont la meilleure compatibilité ascendante. -r
peut être sans ambiguïté aujourd'hui, mais rien n'empêche les futures versions d'une commande d'introduire de nouveaux paramètres. Vous allez utiliser un IDE (ISE ou VS Code). Appuyez sur Ctrl+ Spaceet complétez automatiquement ce paramètre.
Notez que ls -r
c'est ambigu. -ReadOnly
est un autre paramètre de Get-ChildItem
.
Lorsque vous spécifiez des arguments de chaîne pour les applets de commande, les placez-vous entre guillemets (New-Object 'System.Int32' contre New-Object System.Int32
En général, les guillemets ne doivent être utilisés que lorsque cela est nécessaire (par exemple New-Object -TypeName 'System.Collections.Generic.HashSet[System.Int32]'
. Utilisez des guillemets simples lorsque vous le pouvez et uniquement des guillemets doubles lorsque vous devez encapsuler des guillemets simples ou intégrer des variables.
Lorsque vous écrivez des fonctions et des filtres, spécifiez-vous les types de paramètres?
Je le fais généralement, sauf si je dois spécifiquement accepter une grande variété de types avec le même paramètre et que je ne veux pas écrire d'ensembles de paramètres individuels.
Écrivez-vous des applets de commande dans le cas (officiel) correct?
Affaire Pascal. Oui.
Pour les mots clés comme COMMENCER ... PROCESSUS ... FIN les écrivez-vous uniquement en majuscules?
J'ai vu les déclarations, les opérateurs et les constructions de langage que Begin
, If
, ForEach
, -NotIn
ainsi que begin
, if
, foreach
,-notin
. Personnellement, je préfère les minuscules et laisse les commandes comme Pascal, mais elles sont toutes les deux également courantes.
Autres:
Spécifiez toujours les paramètres. Ne vous fiez pas à l'ordre positionnel. New-Object -TypeName System.Int32
fini New-Object System.Int32
. Je ne sais pas si cela a été convenu, mais, encore une fois, cela semble soutenir l'idée générale de "ne pas être ambigu".
Si j'écris un module, j'utilise des verbes standard indiqués par Get-Verb
. Cette liste est cependant extrêmement étroite, donc les noms de script autonomes pour les scripts que moi-même exécuterai souvent ne le font pas. Le problème avec la liste de verbes générique est qu'elle tend vers Get-ScriptForSpecificPurposeNoNotThatOneTheOtherOne.ps1
. Si j'écris un script qui extrait certaines pages d'un fichier PDF, je ne l'appelle pas Get-ExtractedAccountPDFPages.ps1
. Je l'appelle Extract-AccountPDFPages.ps1
. Je ne suis pas préoccupé par la découvrabilité d'un script qui s'exécute comme un programme lui-même et n'est pas destiné à être modulaire par sa nature même.
Brisez les règles quand elles sont plus lisibles, plus concrètes ou plus faciles à maintenir.