Parameter

Abgeschlossen

Nachdem Sie einige Skripts erstellt haben, werden Sie möglicherweise feststellen, dass Ihre Skripts nicht flexibel sind. Es ist nicht effizient, Änderungen direkt in Ihren Skripts vorzunehmen. Es gibt eine bessere Möglichkeit zum Verarbeiten von Änderungen: die Verwendung von Parametern.

Die Verwendung von Parametern macht Ihre Skripts flexibel, da sie es Benutzern ermöglichen, Optionen auszuwählen oder Eingaben an die Skripts zu senden. Sie müssen Ihre Skripts nicht so häufig ändern, da Sie in einigen Fällen nur einen Parameterwert ändern müssen.

Parameter werden von Cmdlets, Funktionen und Skripts akzeptiert.

Deklarieren und Verwenden eines Parameters

Sie müssen das Schlüsselwort Param mit einer öffnenden und schließenden Klammer verwenden, um einen Parameter zu deklarieren:

Param()

In den Klammern definieren Sie Ihre Parameter und trennen sie durch Kommas. Eine typische Parameterdeklaration könnte wie folgt aussehen:

# CreateFile.ps1
Param (
  $Path
)
New-Item $Path # Creates a new file at $Path.
Write-Host "File $Path was created"

Das Skript verfügt über einen $Path-Parameter, der später im Skript zum Erstellen einer Datei verwendet wird. Das Skript ist jetzt flexibler.

Verwenden des Parameters

Sie müssen einen Namen und einen Wert angeben, um ein Skript mit einem Parameter aufzurufen. Angenommen, das obige Skript heißt CreateFile.ps1. Rufen Sie dieses z. B. wie folgt auf:

./CreateFile.ps1 -Path './newfile.txt' # File ./newfile.txt was created.
./CreateFile.ps1 -Path './anotherfile.txt' # File ./anotherfile.txt was created.

Da Sie einen Parameter verwendet haben, müssen Sie die Skriptdatei nicht ändern, wenn die Datei etwas anderes aufrufen soll.

Hinweis

Für dieses spezielle Skript ist die Verwendung eines Parameters nicht besonders von Vorteil, da es nur New-Item aufruft. Sobald Ihr Skript jedoch ein paar Zeilen lang ist, lohnt sich die Verwendung des Parameters.

Verbessern Ihrer Parameter

Wenn Sie zum ersten Mal ein Skript erstellen, das Parameter verwendet, können Sie sich genau merken, wofür die Parameter gelten und welche Werte für sie sinnvoll sind. Im Laufe der Zeit vergessen Sie diese Details möglicherweise. Vielleicht möchten Sie ein Skript auch an einen Kollegen weitergeben. Die Lösung in diesen Fällen besteht darin, eindeutig zu sein, wodurch Ihre Skripts einfach zu verwenden sind. Sie möchten, dass ein Skript frühzeitig fehlschlägt, wenn es unsinnige Parameterwerte übergibt. Folgende Punkte sollten Sie bei der Definition von Parametern beachten:

  • Ist dies obligatorisch? Ist der Parameter optional oder erforderlich?
  • Welche Werte sind zulässig? Welche Werte sind sinnvoll?
  • Akzeptiert er mehr als einen Werttyp? Akzeptiert der Parameter einen beliebigen Werttyp wie „string“, „boolean“, „integer“ und „object“?
  • Kann der Parameter auf einem Standardwert basieren? Können Sie den Wert ganz auslassen und stattdessen einen Standardwert verwenden?
  • Können Sie die Benutzerfreundlichkeit weiter verbessern? Können Sie für den Benutzer noch eindeutiger sein, indem Sie eine Hilfemeldung bereitstellen?

Auswählen eines Ansatzes

Alle Parameter sind standardmäßig optional. Oftmals ist dieses Standardverhalten ausreichend, aber manchmal müssen Benutzer Parameterwerte angeben, und die Werte müssen sinnvoll sein. Wenn der Benutzer keinen Wert für einen Parameter angibt, sollte das Skript beendet werden oder dem Benutzer mitteilen, wie das Problem behoben werden soll. Im schlimmsten Fall wird das Skript weiter ausgeführt und führt Aktionen durch, die Sie nicht beabsichtigen.

Es gibt eine Reihe von Ansätzen, die Sie verwenden können, um Ihr Skript sicherer zu machen. Sie können benutzerdefinierten Code schreiben, um den Parameterwert zu überprüfen. Oder Sie können Decorator-Elemente verwenden, die ungefähr dasselbe tun. Sehen wir uns beide Ansätze an.

  • Verwenden Sie If/Else. Mit dem If/Else-Konstrukt können Sie den Wert eines Parameters überprüfen und dann entscheiden, was zu tun ist. Hier sehen Sie ein Beispiel:

    Param(
       $Path
    )
    If (-Not $Path -eq '') {
       New-Item $Path
       Write-Host "File created at path $Path"
    } Else {
       Write-Error "Path cannot be empty"
    } 
    

    Das Skript führt Write-Error aus, wenn Sie keinen Wert für $Path bereitstellen.

  • Verwenden Sie den Parameter[]-Decorator. Eine bessere Möglichkeit, die weniger Eingaben erfordert, ist die Verwendung des Parameter[]-Decorator-Elements:

    Param(
       [Parameter(Mandatory)]
       $Path
    )
    New-Item $Path
    Write-Host "File created at path $Path"
    

    Wenn Sie dieses Skript ausführen und einen Wert für $Path weglassen, wird ein Dialogfeld angezeigt, in dem Sie zur Eingabe des Werts aufgefordert werden:

    cmdlet CreateFile.ps1 at command pipeline position 1
    Supply values for the following parameters:
    Path:
    

    Sie können diesen Decorator verbessern, indem Sie eine Hilfemeldung bereitstellen, die Benutzern angezeigt wird, wenn sie das Skript ausführen:

    [Parameter(Mandatory, HelpMessage = "Please provide a valid path")]
    

    Wenn Sie das Skript ausführen, erhalten Sie eine Meldung, in der Sie aufgefordert werden, !? für weitere Informationen einzugeben:

    cmdlet CreateFile.ps1 at command pipeline position 1
    Supply values for the following parameters:
    (Type !? for Help.)
    Path: !?  # You type !?
    Please provide a valid path  # Your Help message.
    
  • Weisen Sie einen Typ zu. Wenn Sie einem Parameter einen Typ zuweisen, können Sie z. B. festlegen, dass der Parameter nur Zeichenfolgen und keine booleschen Werte akzeptiert. Wenn Sie so vorgehen, weiß der Benutzer, was zu erwarten ist. Sie können einem Parameter einen Typ zuweisen, indem Sie ihm den Typ voranstellen, der in Klammern eingeschlossen ist:

    Param(
       [string]$Path
    )
    

Diese drei Ansätze schließen sich nicht gegenseitig aus. Sie können sie kombinieren, um Ihr Skript sicherer zu machen.