Was ist der empfohlene Codierungsstil für PowerShell?

Gibt es einen empfohlenen Codierungsstil zum Schreiben von PowerShell-Skripten?

Es istnicht wie man den Code strukturiert (wie viele Funktionen, ob man ein Modul benutzt, ...). Es geht um 'wie man den Code so schreibt, dass er lesbar ist'.

In Programmiersprachen gibt es einigeEmpfohlene Codierungsstile (was zuEinzug, wie einzurücken - Leerzeichen / Tabulatoren, wo zu machenNeue Zeile, wo zu setzenHosenträger, ...), aber ich habe keinen Vorschlag für PowerShell gesehen.

Ich interessiere mich besonders für:

So schreiben Sie Parameter

function New-XYZItem
  ( [string] $ItemName
  , [scriptblock] $definition
  ) { ...

(Ich sehe, dass es eher der 'V1'-Syntax entspricht.)

oder

function New-PSClass  {
  param([string] $ClassName
       ,[scriptblock] $definition
  )...

oder (warum ein leeres Attribut hinzufügen?)

function New-PSClass  {
  param([Parameter()][string] $ClassName
       ,[Parameter()][scriptblock] $definition
  )...

oder (andere Formatierungen, die ich vielleicht in Jaykuls Code gesehen habe)

function New-PSClass {
  param(
        [Parameter()]
        [string]
        $ClassName
        ,
        [Parameter()]
        [scriptblock]
        $definition
  )...

oder ...?

So schreiben Sie eine komplexe Pipeline

Get-SomeData -param1 abc -param2 xyz | % {
    $temp1 = $_
    1..100 | % {
      Process-somehow $temp1 $_
    }
  } | % {
    Process-Again $_
  } |
  Sort-Object -desc

oder (Name des Cmdlets in der neuen Zeile)

Get-SomeData -param1 abc -param2 xyz |
  % {
    $temp1 = $_
    1..100 |
      % {
        Process-somehow $temp1 $_
      }
  } |
  % {
    Process-Again $_
  } |
  Sort-Object -desc |

Und wenn doch-begin, -process, und-end Parameter? Wie mache ich es am besten lesbar?

Get-SomeData -param1 abc -param2 xyz |
  % -begin {
     init
  } -process {
     Process-somehow2 ...
  } -end {
     Process-somehow3 ...
  } |
  % -begin {
  } ....

oder

Get-SomeData -param1 abc -param2 xyz |
  %  `
    -begin {
      init
    } `
    -process {
      Process-somehow2 ...
    } `
    -end {
      Process-somehow3 ...
    } |
  % -begin {
  } ....

Die Einrückung ist hier wichtig und welches Element auch in die neue Zeile eingefügt wird.

Ich habe nur Fragen behandelt, die mir sehr häufig in den Sinn kommen. Es gibt einige andere, aber ich möchte diese Stapelüberlauf-Frage kurz halten.

Alle anderen Vorschläge sind willkommen.