Funktionen treten in PowerShell häufig auf, und um die PowerShell-Sprache wirklich zu verstehen, ist es wichtig, dass Sie wissen, wie Funktionen funktionieren. In diesem Artikel zeigen wir, wie sich eine PowerShell-Funktion von im Grunde nichts zu Parametern mit Validierungsattributen entwickelt.
Um dies zu demonstrieren, beginnen wir zunächst mit einer Funktion, die einfacher nicht sein kann.
function Write-Log {
param()
}
Wenn diese Funktion innerhalb einer PowerShell-Sitzung ausgeführt wird, wird sie ausgeführt, führt jedoch nichts aus, da kein Code ausgeführt werden muss. PowerShell führt einfach die Funktion selbst aus und kehrt zurück.
Damit die Funktion tatsächlich etwas tut, müssen wir Code hinzufügen. Code wird zwischen dem param-Block und der letzten geschweiften Klammer hinzugefügt. Sie können unten sehen, dass ich meine Write-Log-Funktion dazu bringe, die Zeichenfolge „Ich habe etwas getan“ an die Konsole zurückzugeben.
function Write-Log {
param()
'I did something'
}
PS> Write-Log
I did something
Unsere Funktion heißt Write-Log, daher gehe ich davon aus, dass dies eine Funktion sein wird, die schließlich eine Art Text in eine Protokolldatei schreibt. Da wir nicht jedes Mal dasselbe in eine Protokolldatei schreiben möchten, müssen wir eine Möglichkeit bereitstellen, die Nachricht zu ändern, wenn die Funktion ausgeführt wird. Dazu fügen wir einen Parameter hinzu. Mit Parametern kann der Benutzer zur Laufzeit verschiedene Werte an die Funktion übergeben. Dadurch kann die Funktion zur Laufzeit dynamische Eingaben erfassen.
Um einen Parameter hinzuzufügen, füge ich eine Variable hinzu. In diesem Fall heißt die Variable Message. Ich füge es wie unten gezeigt in den Parameterblock ein. Sie können dann sehen, dass ich diesen Parameter innerhalb der Funktion selbst referenzieren kann. Bei der Ausführung gibt die Funktion den Wert zurück, den ich an den Nachrichtenparameter übergebe.
function Write-Log {
param($Message)
$Message
}
PS> Write-Log -Message 'I did something'
I did something
Sie müssen nicht bei nur einem Parameter anhalten. Wir können hier so viele hinzufügen, wie wir wollen. Unten füge ich einen Schweregradparameter hinzu, der einen Wert bereitstellt, wenn die Funktion ausgeführt wird, und Sie können sehen, dass sie dasselbe Verhalten aufweist.
function Write-Log {
param($Message, $Severity)
"$Message - Severity: $Severity"
}
Write-Log -Message 'I did something' -Severity 1
Jetzt, da wir wissen, wie man mit Parametern umgeht, können wir in Parametertypen einsteigen. Ein Parameter hat einen Typ wie alles andere in PowerShell. Oben verwendete es einen Typ, aber es akzeptierte jede Art von Objekt, das man sich vorstellen kann. Der Parameter wurde nicht explizit eingegeben. Es empfiehlt sich, dies für alle Parameter zu tun, um sicherzustellen, dass nur die erwarteten Werte übergeben werden.
Um einen Typ zu definieren, können wir den Typ in eckigen Klammern hinzufügen, bevor der Parameter deklariert wird.
function Write-Log {
param($Message)
$Message
}
Sobald dem Parameter ein expliziter Typ zugewiesen wurde, akzeptiert PowerShell nur Eingaben dieses Typs oder eines Objekts, das konvertiert werden kann. In diesem Beispiel unten übergebe ich den booleschen Wert $ false an den Nachrichtenparameter. Sie können sehen, dass PowerShell dies nicht zulässt. Dies liegt daran, dass ein boolescher Typ nicht in einen ServiceController-Typ konvertiert werden kann.
Wenn wir jedoch ein ServiceController-Objekt übergeben, das Get-Service zurückgibt, funktioniert es einwandfrei.
PS> Write-Log -Message $service
Status Name DisplayName
------ ---- -----------
Stopped AdtAgent Microsoft Monitoring Agent Audit Fo...
Wir können auch Parameterattribute verwenden. Parameterattribute ermöglichen es uns, verschiedene Eigenschaften jedes Parameters zu definieren, die bestimmen, wie er funktioniert. Im folgenden Beispiel verwende ich den obligatorischen Parameter. Diese Attribute zwingen den Benutzer, einen Wert an den Nachrichtenparameter zu übergeben, da sonst die Funktion nicht ausgeführt wird.
Ich setze auch einen Standardwert für den Schweregradparameter. Auf diese Weise kann ich erzwingen, dass der Schweregrad immer 1 ist, es sei denn, er wird zur Laufzeit überschrieben, indem ein Wert an diesen Parameter übergeben wird.
function Write-Log {
param(
$Message,
$Severity = 1
)
"$Message - Severity: $Severity"
}
Schließlich können wir Parameter-Validierungsattribute verwenden. Parametervalidierungsattribute sind eine großartige Möglichkeit, um einzuschränken, welche Werte an einen Parameter übergeben werden. Im folgenden Beispiel verwende ich das ValidateRange() Validierungsattribut. Dieses Attribut wird für Parameter vom Typ integer verwendet, um einen Bereich zulässiger Zahlen zu definieren. In diesem Beispiel erlaube ich nur Werte des Schweregrads von 1-5. Jeder andere Wert, der nicht in diesem Bereich liegt, schlägt fehl.
function Write-Log {
param(
$Message,
$Severity
)
"$Message - Severity: $Severity"
}
Einpacken
Inzwischen sollten Sie ein grundlegendes Verständnis dafür haben, wie Funktionen in PowerShell funktionieren. Wir haben alles behandelt, was Sie wissen müssen, um mit dem Erstellen nützlicher Funktionen in PowerShell zu beginnen. Ich ermutige Sie, Zeiten in Ihren Skripten zu bemerken, in denen eine Funktion nützlich wäre, und sie zu erstellen. Sie werden im Laufe der Zeit sehen, dass Ihr Code sauberer und viel einfacher zu lesen wird.