Windows PowerShell: Neue Syntax in der neuen Shell

Einige neue Syntaxbefehle in Windows PowerShell Version 3 helfen Ihnen, leichter lesbare, jedoch etwas eingeschränkte Befehle zu schreiben.

Don Jones

Eines der neuen Features in Windows PowerShell Version 3 ist eine neue Form der Syntax der Where-Object und ForEach-Object-Cmdlets. Beide Cmdlets akzeptieren normalerweise einen Skriptblock (in der Where-Object, it's called ein Filterscript, weil es entweder $True oder $False zurückgeben muss).

Innerhalb dieser Skriptblock verwenden Sie das $_ Platzhalter Symbol darstellen, "was auch immer in das Cmdlet übergeben wurde." Hier ist ein Beispiel für beide Cmdlets verwenden (Dies ist eine vernünftige Real-Welt-Befehl, aber es veranschaulicht die Verwendung der Cmdlets):

Get-WmiObject –class Win32_LogicalDisk | Where-Object –filterscript{ $_.DriveType –eq 3 } | ForEach-Object –process { $_.ChkDsk() }

Sie sehen nie diese Befehle auf diese Weise geschrieben. Menschen neigen dazu, Aliase, abgeschnittene Parameternamen und Positionsparameter verwenden um Eingabe zu speichern. Die folgenden nicht ungewöhnlich:

gwmi Win32_LogicalDisk | ? { $_.DriveType –eq 3 } | % { $_.ChkDsk() }

Es gibt nichts wie eine kleine arkanen Syntax Arbeitsplatzsicherheit, Rechts sicherzustellen? Where-Object neue Syntax können Sie dies tun:

gwmi Win32_LogicalDisk | where DriveType –eq 3 | % { $_.ChkDsk() }

Beachten Sie, dass ich eingeschaltet, um einen anderen Alias für das Cmdlet. Verwenden Sie können weiterhin? Wenn Sie wollen, aber das macht mich verrückt. Ich komme aus einer langen Basis, wo? wurde eine Verknüpfung für die Print-Anweisung. Lesen? in einer Windows PowerShell schmerzt Befehl mein Gehirn. Ich habe auch die geschweiften Klammern und die $_-Symbol verzichtet.

Where-Object hat im wesentlichen jetzt einen positionellen Parameter die Eigenschaft akzeptieren (DriveType, in meinem Beispiel) filtern möchten. Es definiert die wichtigsten Windows PowerShell-Operatoren (- Eq, - Ne, - wie, - Gt, usw.) als Parameter. Der Wert für diesen Parameter ist der Wert, die Sie filtern möchten (hier ist der Wert 3). Diese Kurzform ist einfacher zu lesen, aber Sie können es nur für einen einzigen Vergleich. Die folgenden nicht beispielsweise ein rechtlicher Hinweis:

Gwmi Win32_Service | Where StartMode –eq 'Auto' –and State –ne 'Running'

Dafür musst du wechseln Sie zurück zu der alten Schule-Syntax:

Gwmi Win32_Service | Where { $_.StartMode –eq 'Auto' –and $_.State –ne 'Running' }

ForEach-Object wird eine ähnliche, reduziert-Satzzeichen Syntaxform:

gwmi Win32_LogicalDisk | where DriveType –eq 3 | foreachChkDsk()

Wieder habe ich eingeschaltet, um den ForEach-Alias anstelle von % um dies einfacher zu lesen. Sie könnten weiterhin % wenn du willst. Einer meiner Kollegen MVPs schrieb ein große Blog-Artikel über diese Formen verkürzt, und es ist lesenswert. Er führt auch $PSItem, die zu einer Alternative für die oft missverstandene $_ Symbol zu sein scheint.

Persönlich, ich habe gemischte Gefühle über diese neuen Syntaxformen der. Auf der einen Seite sind sie auf jeden Fall einfacher für einen Newcomer zu begreifen. Beseitigung der geschweiften Klammern und die immer verwirrend $_ ist groß. Auf der anderen Seite, sind diese neuen Formen nicht voll funktionsfähig. Sie können nur einen einzigen Vergleich tun. Sie müssen noch die alte Syntax lernen.

Außerdem gibt es mehr als sechs Jahre alten Stil Syntax in Blogs, Zeitschriftenartikel und Bücher im Umlauf. Du wirst noch brauchen, um die alte Syntax kennen, um diese Beispiele Sinn.

Also nicht diese neue Syntax beseitigen die Notwendigkeit, die alte Syntax kennen. Es bedeutet nur, dass Sie zwei Formen anstelle von einem erinnern. Trotzdem ist es, was wir haben, um mit zu arbeiten, so dass die Art und Weise arbeiten wir.

Don Jones

Don Jones  ist ein Microsoft MVP Award Empfänger und Autor von "Lernen Sie Windows PowerShell in ein Monat der Mittagessen" (Manning Publications, 2011), ein Buch so konzipiert, dass jeder Administrator mit Windows PowerShell wirksam zu helfen. Jones bietet öffentlichen und vor-Ort-Training an Windows PowerShell. Sie erreichen ihn durch ConcentratedTech.com oder bit.ly/AskDon.

Verwandter Inhalt