Windows PowerShell: Splatting

Bundling Parameter, bevor sie zusammen auf einen Befehl senden Sie speichern, kann Zeit, aber nur wenn Sie die neueste Version von Windows PowerShell verwenden.

Don Jones

Wo sonst aber in der IT-Branche konnte verwenden Sie ein Wort wie "Splatting" in einem Kontext seriöses, professionelles? Windschutzscheibenreparatur, vielleicht, aber nicht viele andere Orte.

Im Rahmen von Windows PowerShell ist Splatting eine Möglichkeit bundling-Parameter, um einen Befehl zu senden. Dies ist ein neues Feature von Windows PowerShell 2.0. Wenn Sie weiterhin mit Version 1, um auszuführenden sind (sagen, da Sie Exchange Server 2007 verwenden, der es erfordert), und dies nicht funktioniert.

Der alte Ansatz

Normalerweise würden Sie Befehle ausführen, indem Parameter werden rechts in der Befehlszeile. Beispiel:

Get-WmiObject –computername SERVER-R2 –class Win32_LogicalDisk –filter "DriveType=3" –credential "Administrator"

Dennoch möglich, die in Version 2.0 von der Shell selbstverständlich. Wenn Ihnen nicht gefällt, alle diese eingeben, können Sie die Parameternamen abschneiden. Achten Sie darauf, genügend jeder Parametername bereitzustellen, so dass die Shell kann feststellen, welche Parameter Sie bedeutete. Dies ist auch zulässig:

Get-WmiObject –comp SERVER-R2 –cla Win32_LogicalDisk –filt "DriveType=3" –cred "Administrator"

Es gibt natürlich noch Positionelle Parameter. Lesen Sie die Hilfe für Get-WmiObject, und sehen Sie, dass Sie den –class-Parameter in der ersten Position verwenden können. Das bedeutet, dass Sie noch nicht den Parameternamen angeben, solange Ihr Wert in der richtigen Stelle geht:

Get-WmiObject Win32_LogicalDisk –comp SERVER-R2 –filt "DriveType=3" –cred "Administrator"

Kombinieren, die mit der Möglichkeit, die Aliase anstelle der Cmdlet-Namen verwenden, und Sie können mit einer wahrhaft unlesbar Befehlszeile landen:

Gwmi Win32_LogicalDisk –comp SERVER-R2 –filt "DriveType=3" –cred "Administrator"

In Klassen sage ich meinen Meine Schüler zu geben, was sie möchten, wenn sie die Shell verwenden. Nachdem alle Mal speichern selbst speichert eingeben. Das ist was die Shell geht. Allerdings hinweisen kann ich auch darauf sollten sie kopieren und fügen Sie einen Befehl in einem Skript. Es ist sinnvoll, den vollständigen Cmdlet-Namen und die vollständige Parameternamen zu verwenden. Dadurch werden das letztendliche Skript einfacher zu lesen.

Einige kommerzielle Skripteditoren, wie PrimalScript von SAPIEN und Quest PowerGUI (mit einem kostenlosen-Plug-in), können sogar Cmdlet oder Parameter-Namen aus den abgekürzten, um vollständige Versionen erweitern. Dadurch können Sie die Namen mit weniger Aufwand zu kürzen.

Die neue Art

Splatting ist eine ganz neue Art der Übergabe von Parametern an einen Befehl. Sie starten durch Erstellen einer Hashtabelle, die auch ein Wörterbuch oder einen assoziativen Vektor bezeichnet wird. Eine Hashtabelle ist eine Auflistung von Schlüssel = Wert-Paaren. Eine grundlegende Hashtable enthält zwei Schlüssel mit einem einzigen Wert. Es sieht in Windows PowerShell:

@{'key1'='value1';'key2'='value2'}

Die Zeichen "@" beginnt die Hashtable, das in geschweifte Klammern eingeschlossen ist, diejenigen, die wie folgt aussehen: {}. Jedes Schlüssel = Wert-Paar ist durch ein Semikolon voneinander getrennt. In Splatting sind die Schlüssel Parameternamen. Die Werte sind die Werte, die Sie an diesen Parameter senden möchten. In einem Skript können Sie Zeilenumbrüche in der Hashtable-Definition auch verwenden, um den Block übersichtlicher zu gestalten:

$parms = @{'class'='Win32_BIOS';
        'computername'='SERVER-R2';
           'filter'='drivetype=3';
   'credential'='Administrator'
          }

Verwenden Sie diesen Parameter zusammen mit dem Befehl übergeben, "@" erneut. Dieses Mal jedoch, fungiert es als Splat-Operator. Es kann verwirrend sein, dass eine einzige Satzzeichen (das Symbol "@") kann zwei verschiedene Verwendungszwecke, aber es funktioniert:

Get-WmiObject @parms

Sie sehen hier einen kleinen Trick. Die Zeichen "@" folgt der Name der Variablen, die das Dollarzeichen enthalten nicht. Wahrscheinlich lohnt, eine kurze Erklärung. Es kann eine größere "Problem" in der Shell viel Personen Reisen.

In Windows PowerShell ist ein Variablenname nur eine Folge von Buchstaben, Zahlen und Unterstriche. Es ist in der Regel möglich, die leer- und Interpunktionszeichen im Namen einer Variablen haben, aber es sieht hässlich. Ein Dollarzeichen vor der Name der Variable weist der Shell nicht auf die Variable selbst behandelt werden sollen. Möchten Sie den Umgang mit seinen Inhalt. In diesem Fall $Var = 5 ist die Zahl "5" in der Variablen mit dem Namen var platzieren

Die Zeichen "@, wenn als Splat-Operator verwendet" werden etwas Ähnliches. Er sagt, "nehmen beliebige Zeichen weiter stammen und wird davon ausgegangen, dass sie einen Variablennamen sind. Genommen Sie an, dass die Variable eine Hashtable enthält, und die Schlüssel Parameternamen sind. Erweitern Sie diejenigen aus, und die Werte aus der Hashtable feed, um diese Parameter." Klingt, eine Erläuterung zu umständlich, aber das ist was passiert ist.

Einige Leute denken, vor allem innerhalb eines Skripts dies:

$parms = @{'class'='Win32_BIOS';
        'computername'='SERVER-R2';
           'filter'='drivetype=3';
           'credential'='Administrator'
          }
Get-WmiObject @parms

Als diese schönere sieht:

Get-WmiObject –computername SERVER-R2 –class Win32_LogicalDisk –filter "DriveType=3" –credential "Administrator"

Es ist definitiv eine Frage der persönlichen Vorlieben. Es ist einfach, das Argument für die Splatting-Methode finden Sie unter. Die Parameter, die Namen und Werte befinden sich ordentlich in ein einzelner Punkt. Sie können diese formatieren, so dass sie nach oben und sehen neat und ordnungsgemäße Zeile ("neat und ordnungsgemäßes" ist ein wichtiges Thema der meine Kurse).

Sollten Sie also das nächste Mal einen Befehl in einem Skript platzierten Splatting. Es klingt cool, wenn nichts anderes.

Don Jones

Don Jones ist ein WindowsPowerShell MVP, Autor und Trainer. Sie erreichen ihn über seine Website, ConcentratedTech.com, die enthält außerdem Informationen über seine Klassen und Konferenz Farbeffekte.

Randleiste: Windows PowerShell auf Video

Artikel dieses Monats hat eine Companion-Video finden Sie unter Magazin-Extras - konzentrierten Technologie. Sie finden außerdem zusätzliche kostenlose Windows PowerShell-Videos an YouTube - Kanal des ConcentratedDon.

Zeit wird knapp, Don Jones' live, exklusive, praktische dreitägige Windows PowerShell Workshop Teil TechMentor Vorträge halte Frühjahr 2011 zu registrieren. Lesen Sie die TechMentorEvents.com für Details.

Verwandter Inhalt