Die Dokumente in @ oɔɯǝɹs Antwort sind eine gute, wenn auch etwas tangentiale Quelle.
Wenn Sie Visual Studio Code verwenden, der die veraltete PowerShell ISE ersetzen soll, installieren Sie die VS Code PowerShell-Erweiterung , enthält dies mehrere Formatierungsoptionen, die zumindest teilweise auf dem inoffiziellen PowerShell Best Practices and Style Guide basieren . Sowohl VS Code als auch die PowerShell-Erweiterung werden von Microsoft verwaltet. Sie ist also so offiziell wie ein inoffizieller Leitfaden.
Ich stimme nicht mit allen Aussagen überein. Zum Beispiel komme ich aus PHP, Java, C # und SQL, wo Semikolons erwartet werden, wenn sie nicht benötigt werden. Code sieht für mich falsch aus , ohne sie, also schließe ich sie ein. Wenn es eine geben #requires SemicolonTerminator
würde, würde ich sie für die meisten meiner Skripte aktivieren, damit ich mir keine Gedanken über Leerzeichen machen muss, die eine Zeile umbrechen. Ich hasse es, Wagenrückläufen und anderen VB-Ismen zu entkommen.
Der Rest ist meiner Meinung nach:
Verwenden Sie den richtigen Cmdlet-Namen oder Alias?
Seien Sie eindeutig. Verwenden Sie niemals einen Alias in einem gespeicherten Skript. sogar ein Standardalias. Es gibt nichts, was einen Benutzer daran hindert, Standardaliase zu ändern. Es ist sicherer anzunehmen, dass sie nicht unveränderlich sind.
Geben Sie den Cmdlet-Parameternamen vollständig oder nur teilweise an (dir -Recurse versus dir -r).
Seien Sie wieder eindeutig. Vollständige Parameternamen weisen die beste Vorwärtskompatibilität auf. -r
mag heute eindeutig sein, aber es gibt nichts, was zukünftige Versionen eines Befehls davon abhält, neue Parameter einzuführen. Sie verwenden eine IDE (entweder ISE oder VS Code). SchlagenCtrl + Spaceund vervollständigen Sie diesen Parameter automatisch.
Beachten Sie, dass ls -r
ist nicht eindeutig. -ReadOnly
ist ein weiterer Parameter von Get-ChildItem
.
Wenn Sie Zeichenfolgenargumente für Cmdlets angeben, setzen Sie diese in Anführungszeichen (New-Object 'System.Int32' im Vergleich zu New-Object System.Int32)
Im Allgemeinen sollten Anführungszeichen nur verwendet werden, wenn dies erforderlich ist (z. B. New-Object -TypeName 'System.Collections.Generic.HashSet[System.Int32]'
. Verwenden Sie einfache Anführungszeichen, wenn Sie können, und nur doppelte Anführungszeichen, wenn Sie einfache Anführungszeichen einkapseln oder Variablen einbetten müssen.
Geben Sie beim Schreiben von Funktionen und Filtern die Arten von Parametern an?
Das tue ich normalerweise, es sei denn, ich muss speziell eine Vielzahl von Typen mit demselben Parameter akzeptieren und möchte keine einzelnen Parametersätze schreiben.
Schreiben Sie Cmdlets in der richtigen (offiziellen) Schreibweise?
Pascal Fall. Ja.
Schreiben Sie Stichwörter wie BEGIN ... PROCESS ... END nur in Großbuchstaben?
Ich habe Aussagen gesehen, Operatoren und Sprachkonstrukte wie Begin
, If
, ForEach
, -NotIn
sowie begin
, if
, foreach
,-notin
. Ich persönlich bevorzuge Kleinbuchstaben und lasse Befehle in Pascal-Schreibweise, aber beide sind gleich häufig.
Andere:
Geben Sie immer Parameter an. Verlassen Sie sich nicht auf die Positionsreihenfolge. New-Object -TypeName System.Int32
vorbei New-Object System.Int32
. Ich weiß nicht, ob das vereinbart ist, aber es scheint die allgemeine Idee von "eindeutig sein" zu stützen.
Wenn ich ein Modul schreibe, verwende ich die mit gekennzeichneten Standardverben Get-Verb
. Diese Liste ist jedoch extrem eng, sodass eigenständige Skriptnamen für Skripte, die nur ich selbst häufig ausführe, nicht verwendet werden. Das Problem mit der generischen Verbliste ist, dass sie in Richtung hinein tendiert Get-ScriptForSpecificPurposeNoNotThatOneTheOtherOne.ps1
. Wenn ich ein Skript schreibe, das bestimmte Seiten aus einer PDF-Datei extrahiert, rufe ich es nicht auf Get-ExtractedAccountPDFPages.ps1
. Ich rufe es anExtract-AccountPDFPages.ps1
. Ich bin nicht besorgt über die Auffindbarkeit eines Skripts, das selbst als Programm ausgeführt wird und von Natur aus nicht modular sein soll.
Brechen Sie die Regeln, wenn sie lesbarer, konkreter oder wartbarer sind.