PowerShell-Funktionsparameter

Migel Hewage Nimesha 1 April 2022
  1. Definieren Sie PowerShell-Funktionsparameter
  2. Benannte Parameter in PowerShell-Funktion
  3. Positionsparameter in der PowerShell-Funktion
  4. Parameter in PowerShell-Funktion umschalten
  5. Splatting in PowerShell-Funktionsparametern
  6. PowerShell-Parameterattribute
  7. Erweiterte Funktion mit benannter Parametersyntax
PowerShell-Funktionsparameter

PowerShell-Funktionsparameter machen Funktionen leistungsfähiger, indem sie Merkmale und Argumente nutzen, um Benutzer daran zu hindern, bestimmte Werte einzugeben. Es fügt ein paar Regeln und Validierungen hinzu, um zu verhindern, dass umfangreiche Skripte geschrieben werden müssen, und sie sind einfach zu verwenden.

Argumente können auch über die Befehlszeile angegeben werden, nachdem die Funktionsparameter angegeben wurden. Benannte, Positions-, Schalter- und dynamische Parameter sind Beispiele für Funktionsparameter. Funktionsparameter können auch verwendet werden, um eine grundlegende Funktion in eine komplexere umzuwandeln.

Definieren Sie PowerShell-Funktionsparameter

Parameter sind wie folgt definiert.

param(
  $Parameter1
)

Best Practices empfehlen, dem Parameter einen Typ hinzuzufügen und einen Parameter()-Block einzufügen, um sicherzustellen, dass der Parameter genau die Art von Eingaben entgegennimmt, die Sie benötigen, und in Zukunft mehr Funktionen ermöglicht. Daher wird wie unten gezeigt vorgegangen.

param(
     [Parameter()]
     [string]$Parameter1
 )

Der obigen Syntax können sogar zusätzliche Parameter hinzugefügt werden, wie unten gezeigt.

param(
     [Parameter()]
     [string]$Param1,
 
     [Parameter()]
     [string]$Param2
 )
 
Write-Host "Param1 value is $Param1"
Write-Host "Param 2 value is $Param2"

Benannte Parameter in PowerShell-Funktion

Benannte Parameter sind eine Technik, um PowerShell-Funktionsparameter in einem Skript zu verwenden. Verwenden Sie den vollständigen Namen des Arguments, wenn Sie ein Skript oder eine Funktion mit benannten Parametern aufrufen.

Nehmen wir an, das obige PowerShell-Skript ist in test.ps1 gespeichert. Hier werden wir Werte für param1 und param2 bereitstellen; Sie können im Beispiel unten sehen, dass der vollständige Name des Parameters übergeben werden sollte.

./test.ps1 -Param1 'value' -Param2 'valuenext'

Ausgabe:

Bild-20211223173801745

Wenn Sie dieses Skript ausführen, sehen Sie in etwa Folgendes, wobei jede Argumentvariable durch den zur Laufzeit bereitgestellten Wert ersetzt wird.

Positionsparameter in der PowerShell-Funktion

Das Übergeben von Elementen nach Position anstelle des Namens ist eine weitere Möglichkeit, Parameter zu verwenden. Der Name des Parameters wird nicht verwendet, wenn ein Parameterwert über Position übergeben wird. Stattdessen vergleicht PowerShell die Werte jedes Arguments mit seiner Position in der Funktion. PowerShell erkennt, dass Param1 vor Param2 im Code angegeben wurde, und gleicht die Werte in der richtigen Reihenfolge ab.

./test.ps1 'value' 'valuenext'

Ausgabe

Param1 value value
Param 2 value is valuenext

Sowohl param1 als auch param2 wurden im obigen Beispiel als String-Typen deklariert, aber es ist nicht der einzige Typ, den Sie verwenden können. Jeder Typ aus der .NET-Klassenbibliothek kann verwendet werden.

Abgesehen von der ursprünglichen Reihenfolge können wir auch fortfahren, indem wir die Position innerhalb des Parameterkonstrukts angeben. Es ist unten gezeigt.

param(
     [Parameter(position = 1)]
     [string]$Param1,
 
     [Parameter(position = 0)]
     [string]$Param2
 )
 
Write-Host "Param1 value is $Param1"
Write-Host "Param 2 value is $Param2"

Hier sehen Sie, dass die Reihenfolge der Parameter geändert wird.

./test.ps1 'param2' 'param1'

Parameter in PowerShell-Funktion umschalten

Dieser Parameter wird verwendet, um anzuzeigen, ob etwas ein- oder ausgeschaltet ist, indem binäre oder boolesche Werte verwendet werden. Zur Spezifizierung wird der Typ switch verwendet. In Fortsetzung des obigen Beispiels fügen wir einen weiteren Schalterparameter namens DisplayParam2 hinzu.

param(
     [Parameter()]
     [string]$Param1,
 
     [Parameter()]
     [string]$Param2,
 
     [Parameter()]
     [switch]$DisplayParam2
 )
 
 Write-Host "Param1 value is $Param1"
 if ($DisplayParam2.IsPresent) {
     Write-Host "Param2 value is $Param2"
 }

Ausgabe:

Schalterparameter in der PowerShell-Funktion

Splatting in PowerShell-Funktionsparametern

Splatting wird hauptsächlich verwendet, wenn viele Parameter vorhanden sind. Das Einrichten von Parametern für ein Skript vor dem Ausführen eines Befehls wird als Splatting bezeichnet. Bisher haben Sie Werte zur Laufzeit definiert und an Parameter übergeben. Sobald Sie eine Sammlung von Parametern haben, die unten angezeigt werden, kann dies ein Problem sein.

param(
     [Parameter()]
     [string]$Param1,
 
     [Parameter()]
     [string]$Param2,
 
     [Parameter()]
     [switch]$DisplayParam2,
 
     [Parameter()]
     [string]$Param3,
 
     [Parameter()]
     [string]$Param4,
 
     [Parameter()]
     [string]$Param5,
 
     [Parameter()]
     [string]$Param6,
 
     [Parameter()]
     [string]$Param7
 )
 
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
 Write-Host "Param2 value is $Param2"
}
Write-Host "Param3 value is $Param3"
Write-Host "Param4 value is $Param4"
Write-Host "Param5 value is $Param5"
Write-Host "Param6 value is $Param6"
Write-Host "Param7 value is $Param7"

Anstatt nach rechts zu gleiten, können Sie eine Hashtabelle verwenden, um die Parameterwerte in einer separaten Phase anzugeben, wie unten dargestellt. Parameterwerte können sauber ausgerichtet werden, was es viel einfacher macht zu verstehen, welche verwendet werden.

Sobald die Hashtabelle eingerichtet ist, können Sie den Namen der Hashtabelle gefolgt von einem @-Zeichen angeben, um alle Argumente an das Skript zu senden.

$params = @{
     Param1             = 'value'
     Param2             = 'valuenext'
     Param3             = 'somevalue'
     Param4             = 'somevalue'
     Param5             = 'somevalue'
     Param6             = 'somevalue'
     Param7             = 'somevalue'
     DisplayParam2 = $true
 }
 
 PS> ./test.ps1 @params

PowerShell-Parameterattribute

Mit Parametereigenschaften können Sie die Parameterfunktionalität auf vielfältige Weise ändern. Sie können reguläre Ausdrücke verwenden, um einen regulären Ausdruck anzupassen, die Verwendung eines bestimmten Parameters vorzuschreiben und die an einen Parameter gelieferten Werte zu überprüfen.

Obligatorische Parameter

In PowerShell können wir je nach Wunsch ein oder mehrere Attribute in einer Funktion ausführen lassen. Daher können wir das mandatory-Attribut innerhalb des Parameter()-Konstrukts verwenden.

param(
     [Parameter(Mandatory)]
     [string]$Param1,
 
     [Parameter()]
     [string]$Param2,
 
     [Parameter()]
     [switch]$DisplayParam2
 )
 
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
    Write-Host "Param2 value is $Param2"
}

Ausgabe:

obligatorische Parameter in der PowerShell-Funktion

Parametervalidierung

Überprüfen Sie abschließend noch einmal, ob die an die Parameter übergebenen Werte korrekt sind. Es ist ideal, um die Möglichkeit zu minimieren, dass jemand einem Parameter einen eindeutigen Wert zuweist. Daher können wir die gewünschten Eingaben mit ValidateSet() wie unten gezeigt angeben.

param(
     [Parameter(Mandatory)]
     [ValidateSet('x', 'y')]
     [string]$Param1,
 
     [Parameter()]
     [string]$Param2,
 
     [Parameter()]
     [switch]$DisplayParam2
 )
 
 Write-Host "Param1 value is $Param1"
 if ($DisplayParam2.IsPresent) {
     Write-Host "Param2 value is $Param2"
 }

Wenn wir param1 andere Werte als x und y geben, wird ein Fehler angezeigt.

Erweiterte Funktion mit benannter Parametersyntax

Wenn einer Funktion das Cmdletbinding-Attribut hinzugefügt wird, verwandelt es sie in eine erweiterte Funktion. Andere allgemeine Argumente werden verwendet, wenn die erweiterte Funktion erstellt wird. Die Syntax ist wie folgt.

function testfunction
{
    [CmdletBinding (DefaultParameterSetName='Param1')]
    Param
    (
         [Parameter(Mandatory=$true, Position=0, ParameterSetName='Param1')]
         [string] Param1,
         [Parameter(Mandatory=$true, Position=0, ParameterSetName='Param2')]
         [string] Param2,
    )
}
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.