Parameter an PowerShell Script übergeben

Um einem PowerShell Script Parameter übergeben zu können müssen diese vorher definiert werden. Dabei legt man auch den Datentyp des Parameters fest. Ein kleines Beispiel verdeutlicht es denke ich am besten:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Definition der Parameter
Param(
    [string]$StringParameter,
    [bool]$BooleanParameter = $False,
    [int]$IntegerParameter = 10,
    [switch]$SwitchParameter
)

# Ausgabe der Parameter
Write-host "StringParameter: $StringParameter"
Write-host "BooleanParameter: $BooleanParameter"
Write-host "IntegerParameter: $IntegerParameter"
Write-host "SwitchParameter: $SwitchParameter"

Mehrere Parameter werden durch Komma getrennt, nach dem letzten Parameter folgt kein Komma. Es können auch gleich Werte zugewiesen werden (im Beispiel $BooleanParameter und $IntegerParameter) die durch den übergebenen Parameter überschrieben werden. Wird ein Parameter beim Aufruf nicht angegeben, gilt der zugewiesene Wert. Statt eines Parameters mit dem Typ Boolean kann auch der Typ Switch verwendet werden. Mit Switch ist die Variable “True” sobald sie im Aufruf vorhanden ist (es reicht also ein “-SwitchParameter” anstatt “-SwitchParameter:$True”).

Ein Aufruf und die Ausgabe könnte dann so aussehen:

PS C:\> .\PowerShellParameter.ps1 -StringParameter "Text" -BooleanParameter $True
StringParameter: Text
BooleanParameter: True
IntegerParameter: 10
SwitchParameter: False

Außerdem kann definiert werden das bestimmte Parameter unbedingt angegeben werden müssen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# Definition der Parameter
Param(
    [Parameter(Mandatory=$True)]
    [string]$StringParameter,

    [Parameter(Mandatory=$False)]
    [bool]$BooleanParameter = $False,

    [Parameter(Mandatory=$False)]
    [int]$IntegerParameter = 10,

    [Parameter(Mandatory=$False)]
    [switch]$SwitchParameter
)

# Ausgabe der Parameter
Write-host "StringParameter: $StringParameter"
Write-host "BooleanParameter: $BooleanParameter"
Write-host "IntegerParameter: $IntegerParameter"
Write-host "SwitchParameter: $SwitchParameter"

Durch “(Mandatory=$True)” wird festgelegt, dass der Parameter angebeben werden muss (Zeile 3). Bei “$False” kann der Parameter angegeben werden, muss er aber nicht. Muss ein Parameter nicht angegeben werden ist es meist sinnvoll ihn wie schon im 1. Beispiel mit einem Default-Wert zu belegen (Zeile 7 und 10).

Wird im Beispiel “$StringParameter” nicht angegeben wird er von PowerShell abgefragt:

PS C:\> .\PowerShellParameter.ps1 -BooleanParameter $True

cmdlet PowerShellParameter.ps1 at command pipeline position 1
Supply values for the following parameters:
StringParameter: