BLOG
Wissenstransfer von IT-Spezialisten
| |

PowerShell: Die Param Anweisung, Erweiterte Parameterdefinition (Advanced Parameters) – Part 15.2

4.1.4  Die Param  Anweisung

Die Definition von Parametern für Skripte muss etwas anders funktionieren, als für die Funktionen, da bei einem Skript die Möglichkeit fehlt, die Parameter in Klammern irgendwo einzugeben. Geschähe das einfach am Anfang des Skriptes, wäre das nicht eindeutig und könnte nicht interpretiert werden, da die Definition von Parametern optional ist. In Skripten wird deshalb für die Parameterdefinition die Param Anweisung verwendet. Es muss der erste Befehl in einem Skript sein (davor sind lediglich Kommentare erlaubt). Die eigentliche Parameterdefinition erfolgt dann innerhalb der runden Klammer:

1
2
3
4
5
Param (
    $a,
    $b
)

Die Param Anweisung kann auch in Funktionen verwendet werden (siehe Seite 37). In diesem Fall kann auf die Eingabe der Parameter in runden Klammern direkt hinter dem Funktionsnamen verzichtet werden. Obwohl die Parameter in mehreren Zeilen stehen, müssen sie mit Kommas voneinander getrennt werden. Bis auf die letzte Zeile, muss jede andere mit einem Komma abgeschlossen sein.

4.1.5  Erweiterte Parameterdefinition (Advanced Parameters)

Die PowerShell bietet einige weitere Möglichkeiten bei der Parameterdefinition und der Validierung der übergebenen Argumente. Diese Validierung musste in der Version 1.0 der PowerShell recht aufwändig innerhalb der Funktion selbst durchgeführt werden, um zu überprüfen, ob gültige Argumente übergeben wurden. Bei der erweiterten Parameterdefinition kümmert sich PowerShell selbst um derartige Überprüfungen. An dieser Stelle werden lediglich die wichtigsten und nützlichsten Einstellungen behandelt. Für die Gesamtheit der Möglichkeiten kann Get-Help About_Function_Advanced_Parameters aufgerufen werden.

Für die erweiterten Einstellungen wurde ein Attribut mit dem Namen „Parameter“ eingeführt (nicht zu verwechseln mit den Parametern einer Funktion oder eines Skriptes!). Es unterstützt eine Reihe von Argumenten. Die Allgemeine Syntax sieht wie folgt aus:

1
2
3
4
Param
(
[Parameter(Arg1=Value1,Arg2=Value2,…)][Datatype]$Parametername]
)

Folgende Tabelle listet die wichtigsten Argumente, welche dem Attribut „Parameter“ zugewiesen werden können:

AttributenameBedeutungBeispiel
MandatoryLegt fest, dass ein Parameter nicht optional ist
1
2
3
4
5
6
Param
  (
    [parameter(Mandatory=$true)]
    [String[]]
    $ComputerName
  )
PositionDefiniert, dass Argumente auch ohne Parameternamen übergeben werden können und legt die Nummer der Position für das Argument fest
1
2
3
4
5
6
Param
  (
    [parameter(Position=0)]
    [String[]]
    $ComputerName
 
ValueFromPipelineLegt fest, dass der Parameter Argumente von der Pipeline akzeptiert
1
2
3
4
5
6
Param
  (
    [parame-ter(ValueFromPipeline=$true)]
    [String[]]
    $ComputerName
  )
HelpMessageBietet die Möglichkeit, eine kurze Hilfe für den Parameter anzugeben
1
2
3
4
5
6
7
Param
  (
    [parameter(HelpMessage="An array of         computer names.")]
    [String[]]
    $ComputerName
  )
AliasLegt einen alternativen Namen für den Parameter fest. Der Parameter kann dann entweder durch seinen Namen oder seinen Alias referenziert werden
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [alias("CN")]
    [String[]]
    $ComputerName
  )
AllowNull Erlaubt einem nicht optionalen Parameter die Zuweisung einer Null
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [String]
    [AllowNull()]
    $ComputerName
  )
AllowEmptyStringErlaubt einem nicht optionalen Parameter die Zuweisung eines leeren Strings
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [String]
    [AllowEmptyString()]
    $ComputerName
  )
AllowEmptyCollectionErlaubt einem nicht optionalen Parameter die Zuweisung einer leeren Sammlung (Collection)
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [String[]]
    [AllowEmptyCollection()]
    $ComputerName
  )
ValidateCountDefiniert für einen nicht optionalen Parameter die minimale und die maximale Anzahl von Argumenten, welche an den Parameter gebunden werden können
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [String[]]
    [ValidateCount(1,5)]
    $ComputerName
  )
ValidateLengthDefiniert für einen nicht optionalen Parameter die minimale und die maximale Stringlänge
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [String[]]
    [ValidateLength(1,10)]
    $ComputerName
  )
ValidatePattern
 Definiert mit Hilfe einer Regular Expression ein Muster, dem das Argument entsprechen muss (im Beispiel eine dreistellige Zahl, jede Ziffer ist aus dem Bereich [0-9]
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [String[]]
    [ValidatePattern("[0-9][0-9][0-9]")]
    $ComputerName
  )
ValidateRange Legt die Unter- und Obergrenze für das Argument fest
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [Int[]]
    [ValidateRange(0,10)]
    $Count
  )
ValidateScriptDefiniert ein Skriptblock zur Validierung des Argumentes. Es wird ein Fehler generiert, wenn das Ergebnis nicht $True ist oder wenn der Code einen Laufzeitfehler erzeugt. Die automatische Variable $_ steht für das übergebene Argument
1
2
3
4
5
6
7
Param
  (
    [parameter()]
    [Int]
    [ValidateScript({$_ -lt 4})]
    $Count
  )
ValidateSetLegt fest, welche exakten Werte (Case insensitiv) ein Argument annehmen darf
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [String[]]
    [ValidateRange("red", "green", "blue")]
    $Color
  )
ValidateNotNullLegt fest, dass der Wert des Argumentes nicht Null sein darf
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [String[]]
    [ValidateNotNull()]
    $UserName
  )
ValidateNotNullOrEmpty Legt fest, dass das Argument weder Null noch leer sein darf
1
2
3
4
5
6
7
Param
  (
    [parameter(Mandatory=$true)]
    [String[]]
    [ValidateNotNullOrEmpty()]
    $UserName
  )

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

Zurück zu Part 15.1 – Skripte, Funktionen und Skriptblöcke (Parameter und Argumente)

Weiter zu Part 15.3 – Die Parametersets