Wie man einen Wert in PowerShell zurückgibt
-
Verwendung des Schlüsselworts
return
in PowerShell - Rückgabewerte in der Pipeline in PowerShell
- Klassen in PowerShell 5 definieren

Im Allgemeinen verlässt das Schlüsselwort return
eine Funktion, ein Skript oder einen Skriptblock. Zum Beispiel können wir es verwenden, um einen Geltungsbereich an einem bestimmten Punkt zu verlassen, einen Wert zurückzugeben oder anzuzeigen, dass das Ende des Geltungsbereichs erreicht wurde.
Allerdings kann die Verwendung des Schlüsselworts return
in Windows PowerShell etwas verwirrend sein, da Ihr Skript eine Ausgabe drucken kann, die Sie möglicherweise nicht erwartet haben.
Dieser Artikel wird erläutern, wie das Schlüsselwort return
funktioniert und wie man es richtig in Windows PowerShell verwendet.
Verwendung des Schlüsselworts return
in PowerShell
Der unten stehende Skriptblock ist die grundlegende Form der Syntax des Schlüsselworts return
.
powershellCopyreturn <expression>
Das Schlüsselwort return
kann allein auftreten, oder ein Wert oder Ausdruck kann ihm folgen. Das Schlüsselwort return
allein gibt die Befehlszeile an ihren vorherigen Aufrufpunkt zurück.
powershellCopyreturn
return $a
return (1 + $a)
Das folgende Beispiel verwendet das Schlüsselwort return
, um eine Funktion zu verlassen, wenn eine Bedingung zu einem bestimmten Zeitpunkt erfüllt ist. In diesem Beispiel werden die ungeraden Zahlen nicht multipliziert, da die Rückgabeanweisung vor der Ausführung dieser Anweisung erfolgt.
powershellCopyfunction MultiplyOnlyEven {
param($num)
if ($num % 2) { return "$num is not even" }
$num * 2
return
}
1..10 | ForEach-Object { MultiplyOnlyEven -Num $_ }
Ausgabe:
textCopy1 is not even
4
3 is not even
8
5 is not even
12
7 is not even
16
9 is not even
20
Windows PowerShell hat verwirrende Rückgabesemantik, wenn man sie aus einer programmiernative Perspektive betrachtet. Es gibt zwei Hauptideen, die wir berücksichtigen müssen:
- Alle Ausgaben werden erfasst und zurückgegeben.
- Das Schlüsselwort return zeigt einen logischen Austrittspunkt an.
Damit gesagt, werden die folgenden beiden Skriptblöcke den Wert der Variablen $a
zurückgeben.
Rückgabeschlüsselwort mit einem Ausdruck:
powershellCopy$a = "Hello World"
return $a
Rückgabeschlüsselwort ohne einen Ausdruck:
powershellCopy$a = "Hello World"
$a
return
Das Schlüsselwort return
wird auch im zweiten Skriptblock nicht benötigt, da das Aufrufen der Variablen in der Befehlszeile explizit die genannte Variable zurückgibt.
Rückgabewerte in der Pipeline in PowerShell
Wenn Sie einen Wert aus Ihrem Skriptblock oder Ihrer Funktion zurückgeben, entfernt Windows PowerShell automatisch die Mitglieder und schiebt sie eins nach dem anderen durch die Pipeline. Der Grund für diesen Anwendungsfall liegt in der Verarbeitung von Windows PowerShell, die eins nach dem anderen erfolgt.
Die folgende Funktion demonstriert diese Idee und wird ein Array von Zahlen zurückgeben.
powershellCopyfunction Test-Return {
$array = 1, 2, 3
return $array
}
Test-Return | Measure-Object | Select-Object Count
Ausgabe:
textCopyCount
-----
3
Wenn Sie das Cmdlet Test-Return
verwenden, wird die Ausgabe der unten stehenden Funktion an das Cmdlet Measure-Object
weitergeleitet. Das Cmdlet zählt die Anzahl der Objekte in der Pipeline, und beim Ausführen beträgt die zurückgegebene Anzahl drei.
Um einen Skriptblock oder eine Funktion nur ein einziges Objekt an die Pipeline zurückzugeben, verwenden Sie eine der folgenden Methoden:
Verwendung der unären Array-Ausdruck in PowerShell
Durch die Verwendung eines unären Ausdrucks kann Ihr Rückgabewert als einzelnes Objekt durch die Pipeline gesendet werden, wie im folgenden Beispiel demonstriert.
powershellCopyfunction Test-Return {
$array = 1, 2, 3
return (, $array)
}
Test-Return | Measure-Object | Select-Object Count
Ausgabe:
textCopyCount
-----
1
Verwenden von Write-Output
mit dem Parameter NoEnumerate
in PowerShell
Wir können auch das Cmdlet Write-Output
mit dem Parameter -NoEnumerate
verwenden. Das folgende Beispiel verwendet das Cmdlet Measure-Object
, um die Objekte zu zählen, die durch das Beispiel aus der Funktion an die Pipeline gesendet werden, durch das Schlüsselwort return
.
Beispielcode:
powershellCopyfunction Test-Return {
$array = 1, 2, 3
return Write-Output -NoEnumerate $array
}
Test-Return | Measure-Object | Select-Object Count
Ausgabe:
textCopyCount
-----
1
Eine weitere Methode, um die Pipeline dazu zu bringen, nur ein einzelnes Objekt zurückzugeben, wurde in PowerShell Version 5 eingeführt, die wir im nächsten Abschnitt des Artikels besprechen werden.
Klassen in PowerShell 5 definieren
Mit Windows PowerShell Version 5.0 können wir nun unsere benutzerdefinierten Klassen erstellen und definieren. Ändern Sie Ihre Funktion in eine Klasse, und das Schlüsselwort return
wird nur das einzelne Objekt unmittelbar davor zurückgeben.
Beispielcode:
powershellCopyclass test_class {
[int]return_what() {
Write-Output "Hello, World!"
return 1000
}
}
$tc = New-Object -TypeName test_class
$tc.return_what()
Ausgabe:
textCopy1000
Wenn die oben stehende Klasse eine Funktion ist, gibt sie alle in der Pipeline gespeicherten Werte zurück.
Ausgabe:
textCopyHello World!
1000
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn