PowerShell-Funktionsparameter
- Definieren Sie PowerShell-Funktionsparameter
- Benannte Parameter in PowerShell-Funktion
- Positionsparameter in der PowerShell-Funktion
- Parameter in PowerShell-Funktion umschalten
- Splatting in PowerShell-Funktionsparametern
- PowerShell-Parameterattribute
- Erweiterte Funktion mit benannter Parametersyntax
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:
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:
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:
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,
)
}
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.