| | 0

PowerShell: Skripte, Funktionen und Skriptblöcke (Parameter und Argumente) – Part 15

4.1 Parameter und Argumente

Ohne die Möglichkeit, Argumente an Funktionen und Skripte zu übergeben, wäre der Nutzen solcher sehr gering. Die Übergabe von Argumenten funktioniert bei Funktionen und Skripten gleich, daher werden die Zusammenhänge vorerst anhand von Funktionen erklärt.
Im ersten Schritt soll die informelle Argumentenübergabe (positional parameters) behandelt werden. Alle Argumente, die an eine Funktion übergeben werden, werden in einem Array Namens $Args gespeichert. Über den Ausdruck $Args.Count innerhalb der Funktion kann die Anzahl der übergebenen Argumente ermittelt werden. Die einzelnen Argumente werden in der Array-Syntax (siehe Kapitel 5.1) angesprochen. Das erste Argument ist $Args[0], das zweite $Args[1], usw. Auf alle übergebenen Argumente kann stets innerhalb der Funktion zugegriffen werden.

Neben der informellen unterstützt die PowerShell auch die formellen Parameter (named parameter). Die formellen Parameter werden in der Funktionsdefinition hinter dem Funktionsnamen in runden Klammern angegeben. Die Parameter werden in Form von PS Variablen definiert, d.h. ein „$“ Zeichen, gefolgt von dem Variablennamen. Ein Beispiel verdeutlicht das:

Function Subtrahieren ($Von, $Wieviel) {$Von - $Wieviel}

Wenn die Funktion aufgerufen wird, werden die übergebenen Argumente an die definierten Parameter gebunden:

1
2
1.  Subtrahieren 3 5
-2

 

Werden bei der Argumentenübergabe keine Parameternamen verwendet, handelt es sich um sogenannte Positionsargumente. Die Reihenfolge der Argumente entscheidet, an welche Parameter sie gebunden werden. Im obigen Beispiel wird die drei an den Parameter $Von und die fünf an den Parameter $Wieviel gebunden. Im Allgemeinen kann das Ergebnis, welches die Funktion zurückliefert, von der Reihenfolge der Argumente beim Aufruf der Funktion abhängig sein, wie das der Fall bei der Funktion „Subtrahieren“ ist. Im Gegensatz dazu werden die Argumente benannt, wenn beim Aufruf der Funktion die Parameternamen verwendet werden. Dazu werden die Namen der Parameter geschrieben, das Dollarzeichen wird dabei durch ein Minuszeichen ersetzt. Dann folgt das Argument:

1
2
1.  Subtrahieren –Wieviel 5 –Von 3
-2

 

Bei der Verwendung von benannten Argumenten spielt die Reihenfolge der Angaben keine Rolle mehr. Es ist denkbar, beide Formen der Argumentenübergabe miteinander zu kombinieren:

1
2
1.  Subtrahieren –Von 3 –Wieviel 5 123 254
-2

 

Die Bindung der Argumente an die Parameter läuft dann wie folgt ab:

  • Das erste benannte Argument wird an den Parameter gebunden und aus $Args entfernt
  • Für jedes weitere benannte Argument wiederholt sich der Prozess
  • Zum Schluss verbleiben die Positionsargumente in $Args

Auf diese Art und Weise ist es möglich, in Funktionen eine dynamische Anzahl von Argumenten zu verarbeiten und (optional) gleichzeitig auch benannte Argumente zu verwenden.
Selbst wenn eine Funktion Parameter definiert, können die Argumente als Positionsargumente übergeben werden. Entscheidend ist dann die Reihenfolge, in der die Parameter innerhalb der Funktion definiert wurden. In der gleichen Reihenfolge müssen dann auch die Argumente übergeben werden. In dem ersten Aufruf der Funktion „Subtrahieren“ würde das Vertauschen der Reihenfolge der Argumente zu völlig anderem Ergebnis führen (was übrigens nicht immer so sein muss. Würde z.B. die Funktion „Subtrahieren“ eine Addition der Argumente durchführen, würde aufgrund des Kommutativgesetzes das Ergebnis unabhängig von der Reihenfolge der Argumente sein).

 

Zurück zur Part 14 – Skripte, Funktionen und Skriptblöcke (Einführung)

Weiter zu Part 15.1 – Typisierung von Parametern, Initialisierung von Parametern, Switchparameter

Eine Übersicht aller Artikel dieser Windows PowerShell Blogserie findet ihr hier.