PowerShell – 10 – Einem Script Parameter übergeben

Save page

Ich wurde gefragt wie man einem Script in PowerShell einen oder mehrere Parameter übergeben kann. Dies ist relativ einfach zu bewerkstelligen. Man muss die zu übergebenden Parameter vorher im Script definieren und den definierten Variablen einem Datentyp zuschreiben. Dazu schreibt man den Datentyp in eckige Klammern, dieses Konstrukt setzten man dann vor die Variable, beispielsweise für einen String, [string]$EingabeString = „“. So ist klar definiert das es sich bei dieser Variable $EingabeString ausschließlich um einen String handelt. Was für Datentypen gibt es innerhalb von PowerShell?

Datentypen

In der folgenden Tabelle sind am häufigsten genutzten Dateitypen aufgelistet.

Datentyp Beschreibung
[string] Zeichenkette fester Länge von Unicode Buchstaben
[char] 16 Bit Unicode-Zeichen. Nur ein Zeichen
[byte] vorzeichenloses 8 Bit Zeichen
[int] vorzeichenbehafteter 32 Bit Integer
[long] vorzeichenbehafteter 64 Bit Integer
[bool] / [switch] Boolean, True/Wahr oder False/Falsch
[decimal] 128 Bit dezimal Wert
[single] Einfache Genauigkeit, Gleitkommazahl
[double] Doppelte Genauigkeit, Gleitkommazahl
[DateTime] Datum und Zeit
[xml] XML Objekte
[array] Feld, Array
[hashtable] Hashtabelle, Steuerwerttabelle

Der Parameterblock im Script

Vordefinierte Parameter werden in der Funktion Param() definiert. Dort werden die Variablen samt des Datentyp und ihrem Wert definiert. Mehre Variablen werden mit einem Komma getrennt. Dies kann wie im folgenden Beispiel definiert aussehen.

Dieses kleine Script kann einen Integer, eine String und eine Bool als Parameter übergeben bekommen. Die Parameter können dann, beispielsweise über die Console auch abgerufen und angezeigt werden. Die Reinfolge der Parameter ist in diesem Beispiel beliebig wie das folgende Bild zeigt.

Paramter übergeben I

Ebenso können hier Parameter auch einfach weggelassen werden, wenn sie nicht von Nöten sind. Parameter können auch im Script vordefiniert werden, im Falle sie werden nicht angegeben, sind aber für das Script von Bedeutung. Dazu habe ich ein simples Script geschrieben, diese möchte die Eingabe eines Ortes, einer Temperatur in Grad Celsius oder Grad Fahrenheit und einen Bool-Wert ob es sich bei der Eingabe um Celsius oder Fahrenheit handelt. Der Boolean ist optional. Für alle drei Parameter gibt es vordefinierte Werte, so kann das Script auch komplett ohne die Angabe von Parametern gestartet werden.

Zuerst starte ich das Script ohne Angabe von Parametern, anschließend gebe ich nur Temperatur und Ort an. Man sieht hier die vordefinierten Werte, da keine Parameter angegeben wurden.

Temperatur Script I

Im zweiten Anlauf habe ich 24,9 Grad Celsius für die Stadt Leipzig angegeben. Die Kommastelle wird bei Dezimalzahlen mit einem Punkt angegeben.

Temperatur Script II

In folgender Konstellation habe ich diesmal einen negativen Wert in Fahrenheit angegeben. Dazu habe ich den Parameter -Fahrenheit angegeben, somit steht in der Textausgabe Fahrenheit oben und es wird korrekt umgerechnet.

Temperatur Script III

Ist der Schalter auf $Fahrenheit $True so spring das Script in den Else-Teil. Dort wird dann Grad Fahrenheit in Grad Celsius umgewandelt. In der letzten Zeile wird die Formatierung auf minimal zwei Stellen nach dem Komma und maximal drei Stellen festgelegt. Dies wird mittels {0:#.00#} realisiert.

Formatierung

Die erste Null ist ein Platzhalter für die Variable $Temperatur. Würde es noch einen zweiten Wert geben, der formatiert werden soll, dann würde aus dieser Null eine Eins, {1:#.00#}, da dies dann der zweite formatierte Wert in dem Ausgabestring wäre. Die beiden Nullen sagen aus, dass es genau zwei feste Stellen nach dem Komma gibt. Die Raute vor dem Punkt besagt das an dieser Stelle eine beliebig langer Zahlenwert stehen kann. Die Raute nach dem Punkt definiert hingegen eine variable Stelle und wird hier nur angezeigt, wenn nicht glatt gerundet wird.

Allgemeines über Parameter für Scripte und Cmdlets

Parameter sind Zusatzinformationen, die man dem Script übergibt. Parameter werden nach der Angabe des Scriptnamens durch ein Leerzeichen getrennt angegeben.Es gibt positionale und benannte Parameter. Diese sind besonders für Cmdlets wichtig. Positionale Parameter müssen genau in der richtigen Reihenfolge angegeben werden, damit diese korrekt von den Cmdlets verarbeitet werden können. Benannte Parameter sind an keine besondere Reihenfolge gebunden. Diese bestehen aus einem Paar, als erstes wird der Name des Parameters, wie gewohnt beginnend mit einem Bindestrich (-Parametername), genannt und anschließt der dazugehörige Wert. Dies ermöglicht eine eindeutige Zuordnung der Werte ohne besondere Reihenfolge. Die Angabe der Parameternamen ist nicht case-sensitiv, d.h. Groß- und Kleinschreibung ist nicht von Bedeutung, lediglich aus Schönheitsgründen. Der Name kann auch abgekürzt  werden, solange er dabei eindeutig bleibt. Eine Besonderheit gilt bei den Switch-Parametern, diese bestehen nur aus dem Parameternamen. Wird der Switch-Parameter mit angeführt, so aktiviert er eine bestimmte Funktion (der Wert wird $True). Wird dieser nicht mit genannt, so bleibt der Wert $False oder wie im Script / Cmdlet vordefiniert.

Soweit zur Übergabe von Parametern.

rewe

Ein Gedanke zu „PowerShell – 10 – Einem Script Parameter übergeben

  1. Pingback: PowerShell – Masterindex | Blog: Stefan Rehwald

Kommentar verfassen