Dokumenty w odpowiedzi @ o @ są dobrym, choć nieco stycznym źródłem.
Jeśli korzystasz z programu Visual Studio Code, który ma zastąpić starzejący się PowerShell ISE, a następnie zainstalujesz rozszerzenie VS Code PowerShell , które zawiera kilka opcji formatowania, które przynajmniej częściowo były oparte na Nieoficjalnych najlepszych praktykach i przewodniku po stylu PowerShell . Zarówno kod VS, jak i rozszerzenie PowerShell są zarządzane przez Microsoft, więc jest to tak oficjalne, jak może być nieoficjalny przewodnik.
Nie zgadzam się ze wszystkim, co twierdzą. Na przykład pochodzę z PHP, Java, C # i SQL, w których można oczekiwać średników, jeśli nie są wymagane. Bez nich kod wygląda na niewłaściwy , więc je uwzględniam. Gdyby istniał #requires SemicolonTerminator
, włączałbym go na większości moich skryptów, więc nie muszę się martwić, że białe znaki przerywają linię. Nienawidzę uciekających powrotów karetki i innych VB-ów.
Reszta to moja opinia:
Używać prawdziwej nazwy lub aliasu polecenia cmdlet?
Bądź jednoznaczny. Nigdy nie używaj aliasu w zapisanym skrypcie; nawet domyślny alias. Nic nie powstrzymuje użytkownika od zmiany domyślnych aliasów. Bezpieczniej jest założyć, że nie są niezmienne.
Podaj nazwę parametru cmdlet w całości lub tylko częściowo (dir -Recurse versus dir -r)
Ponownie bądźcie jednoznaczni. Pełne nazwy parametrów mają najlepszą kompatybilność do przodu. -r
mogą być dziś jednoznaczne, ale nic nie stoi na przeszkodzie, aby przyszłe wersje polecenia wprowadzały nowe parametry. Będziesz używać IDE (kod ISE lub VS). Naciśnij Ctrl+ Spacei autouzupełniaj ten parametr.
Zauważ, że ls -r
jest to niejednoznaczne. -ReadOnly
jest kolejnym parametrem Get-ChildItem
.
Podając argumenty łańcuchowe dla poleceń cmdlet, czy umieszczasz je w cudzysłowie (New-Object 'System.Int32' vs. New-Object System.Int32
Zasadniczo cudzysłowy powinny być używane tylko wtedy, gdy jest to konieczne (np New-Object -TypeName 'System.Collections.Generic.HashSet[System.Int32]'
. Używaj pojedynczych cudzysłowów, gdy możesz, i tylko podwójne cudzysłowy, gdy potrzebujesz obudować pojedyncze cudzysłowy lub osadzić zmienne.
Czy pisząc funkcje i filtry określasz typy parametrów?
Zwykle tak robię, chyba że muszę konkretnie zaakceptować szeroką gamę typów z tym samym parametrem i nie chcę pisać poszczególnych zestawów parametrów.
Czy piszesz polecenia cmdlet w (oficjalnej) poprawnej sprawie?
Sprawa Pascala. Tak.
Dla słów kluczowych, takich jak BEGIN ... PROCESS ... END, czy piszesz je tylko dużymi literami?
Widziałem oświadczenia, operatorów i konstrukcje języka jak Begin
, If
, ForEach
, -NotIn
jak również begin
, if
, foreach
, -notin
. Osobiście wolę małe litery i zostawiam polecenia jako małe litery Pascala, ale oba są równie popularne.
Inne:
Zawsze określaj parametry. Nie polegaj na porządku pozycyjnym. New-Object -TypeName System.Int32
ponad New-Object System.Int32
. Nie wiem, czy zostało to uzgodnione, ale wydaje się, że potwierdza to ogólną ideę „bądź jednoznaczny”.
Jeśli piszę moduł, używam standardowych czasowników wskazanych przez Get-Verb
. Ta lista jest jednak bardzo wąska, więc samodzielne nazwy skryptów dla skryptów, które tylko ja będę uruchamiał, często nie. Problem z ogólną listą czasowników polega na tym, że ma ona tendencję do Get-ScriptForSpecificPurposeNoNotThatOneTheOtherOne.ps1
. Jeśli piszę skrypt, który wyodrębnia niektóre strony z pliku PDF, nie nazywam go Get-ExtractedAccountPDFPages.ps1
. Nazywam to Extract-AccountPDFPages.ps1
. Nie martwię się o możliwość wykrycia skryptu, który działa jako sam program i nie jest z natury modułowy.
Łam zasady, gdy jest bardziej czytelne, bardziej konkretne lub łatwiejsze w utrzymaniu.