Windows PowerShell: Whitespace, bitte

Richtiges Formatieren, mit einem kleinen Leerzeichen hier und da, kann die Windows PowerShell-Befehle ganz erheblich verständlicher machen.

Don Jones

Betrachten Sie die folgende Funktion und sagen Sie mir, was Sie denken, es zu tun. Dies ist eine echte, voll funktionsfähige "Erweiterte Funktion." Ihr Ziel ist es, einfach sagen mir (ohne tatsächlich ausgeführt, es) was es tun soll:

function Get-PCInfo { [CmdletBinding()] param( [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)][string[]]$computername ) PROCESS { Write-Verbose "Beginning PROCESS block" foreach ($computer in $computername) { Write-Verbose "Connecting to $computer" try {$continue = $true $cs = Get-WmiObject -EV mybad -EA Stop -Class Win32_computersystem -ComputerName $computer } catch {$continue = $false $computer | Out-File -FilePath oops.txt -append Write-Verbose "$computer failed" $mybad | ForEach-Object { Write-Verbose $_ } }if ($continue) { $proc = Get-WmiObject win32_processor -ComputerName $computer | select -first 1 $obj = new-object -TypeNamePSObject $obj | add-member NotePropertyComputerName $computer $obj | add-member NotePropertyProcArchitecture $proc.addresswidth $obj | add-member NoteProperty Domain $cs.domain $obj | add-memberNotePropertyPCModel $cs.model $obj.psobject.typenames.insert(0,'MyPCInfo') write-output $obj }}}}

Ist es schwer zu bestimmen, nicht wahr? Das ist, da diese Funktion zeigt eine allzu häufig Verschulden des Skripts und Beispiele finden Sie im Internet und in vielen Ihrer eigenen Ordner. Es verwenden keine Leerstellen. Betrachten Sie nun diese überarbeitete Beispiel:

function Get-PCInfo { [CmdletBinding()] param( [Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]]$computername ) PROCESS { Write-Verbose "Beginning PROCESS block" foreach ($computer in $computername) { Write-Verbose "Connecting to $computer" try { $continue = $true $cs = Get-WmiObject -EV mybad -EA Stop ` -Class Win32_computersystem ` -ComputerName $computer } catch { $continue = $false $computer | Out-File -FilePath oops.txt -append Write-Verbose "$computer failed" $mybad | ForEach-Object { Write-Verbose $_ } } if ($continue) { $proc = Get-WmiObject win32_processor ` -ComputerName $computer | select -first 1 $obj = new-object -TypeNamePSObject $obj | add-member NotePropertyComputerName $computer $obj | add-member NotePropertyProcArchitecture $proc.addresswidth $obj | add-member NoteProperty Domain $cs.domain $obj | add-memberNotePropertyPCModel $cs.model $obj.psobject.typenames.insert(0,'MyPCInfo') write-output $obj } } } }

AH, das ist viel einfacher zu folgen. In einem {Konstrukt} Befehle sind eingerückt. Lange Befehle sind schön verpackt. Es ist viel besser lesbar.

Es ist so viel einfacher zu helfen, jemand ein Skript zu debuggen, wenn es ordentlich formatiert ist. Versuchen Sie einfach, einfacher verlegt oder fehlende geschweifte Klammer zu finden, wenn man nichts vorgesehen. Sie könnten blind gehen. Das Problem ist, dass viele von Ihnen wissen nicht wie diese Art der Formatierung zu erreichen. Lassen Sie uns jetzt dieses Problem lösen.

Einzug

Die meisten script Editors funktionieren hervorragend mit der Tab-Taste, einschließlich der freien Windows PowerShell ISE mit dem Windows PowerShell-Version 2-Installationsprogramm enthalten. Möglicherweise einigen vier oder fünf Leerzeichen anstelle von einer tatsächlichen Tabstoppzeichen eingefügt, aber das ist in Ordnung. Bei den meisten können Sie einen Block von Befehlen markieren, und drücken Sie Tab, um alle einzuziehen oder Umschalt + Tab, um diese unindent.

Bequeme, und es empfiehlt Ihnen, halten Ihr Code sauber suchen einfach dazu. Die meisten Editoren verwaltet außerdem Ihre Einzug, d. h., wenn eine Zeile ein und drücken Sie Eingabe abgeschlossen ist, der Cursor die nächste Zeile an der gleichen Einzugsposition für den beginnt.

Zeilenumbruch

Dies ist ein sehr-weniger offensichtlichen Trick, insbesondere in Windows PowerShell Skripts. Die Idee ist, zu versuchen und verhindern Zeilen umbrechen horizontal, wenn unbedingt notwendig. Windows PowerShell können Sie einen Zeilenumbruch nach einem beliebigen Zeichen, die der Shell sagt, "Es gibt weitere kommen" tatsächlich einschließlich:

  • Kommas
  • Semikolons
  • Pipes

Das Beispiel "Verbesserte" zu sehen, was ich meine betrachten.

Können Sie auch das Windows PowerShell-Escape-Zeichen: die umgekehrten Apostroph ('). Wenn Sie ein einfaches schließendes Anführungszeichen mit einem Wagenrücklauf sofort folgen, entgeht"es", Carriage return. Dies zwingt die Windows PowerShell, die folgende physikalische Zeile als Teil derselben logischen Zeile zu behandeln. Mit anderen Worten, ist es die Art von einem Zeilenfortsetzungszeichen. Ich hasse dieses though. Es ist schwer zu sehen, auf dem Bildschirm und beim Drucken, und es ist leicht zu verwechseln dead Pixels auf Ihrem Monitor oder ein Stück Verirrte Toner auf die Seite.

Es ist auch leicht missbraucht. Wenn Sie den umgekehrten Apostroph mit Leerzeichen, Tabstopps oder einer anderen Festplatte Siehe Leerzeichen folgen, werden nicht es als ein Zeilenfortsetzungszeichen fungieren. Es wird keinen Wagenrücklauf entgehen. Ich habe es verwendet ein paar Mal im Beispiel "Verbesserte" nur, damit Sie es sehen können. Zögern Sie nicht dieses Verfahren verwenden, wenn es ein besserer Weg gibt.

Konsistenz

Es ist wichtig, konsistente Formatierungen. Beispielsweise bevorzuge ich Konstrukte wie folgt tun:

if ($continue) { # some code goes here }

Während andere wie diese Formatierung besser:

if ($continue) { # some code goes here }

Verwenden Sie je nachdem, was Sie formatieren, aber wählen Sie eine und -Stick mit. Das Ziel ist, damit Ihr Code konsistent und leicht zu lesen.

Gehen Sie zurück und neu formatieren

Nehmen Sie sich einige dieser hässliche alte Skripts betreiben und verbringen ein paar Minuten, die sie formatieren. Sie werden tun eine große Güte für alle Arme Person hat zu kommen in sechs Monaten und herauszufinden, was Sie dachten. Außerdem stehen die Chancen gut, "schlechte"Person Sie sein wird.

Don Jones

**Don Jones**ist ein Microsoft MVP Award Empfänger und Autor von "Erfahren Sie Windows PowerShell in ein Monat von Rezepten" (Manning Publications Co., 2010), ein Buch soll jeder Administrator Windows PowerShell wirksam zu helfen. Jones bietet auch Schulungen für Öffentliche und vor-Ort-Windows PowerShell. Sie erreichen ihn über seine Website unter ConcentratedTech.com.

Verwandter Inhalt