Rückgabewert in PowerShell
-
Verwenden des Schlüsselworts
return
in PowerShell - Rückgabewerte in der Pipeline in PowerShell
- Definieren von Klassen in PowerShell 5
![Rückgabewert in PowerShell](/img/PowerShell/feature-image---return-value-in-powershell.webp)
Im Allgemeinen verlässt das Schlüsselwort return
eine Funktion, ein Skript oder einen Skriptblock. So können wir damit beispielsweise einen Geltungsbereich an einer bestimmten Stelle verlassen, einen Wert zurückgeben oder anzeigen, dass das Ende des Geltungsbereichs erreicht ist.
In Windows PowerShell kann die Verwendung des Schlüsselworts return
jedoch etwas verwirrend sein, da Ihr Skript möglicherweise eine Ausgabe ausgibt, die Sie möglicherweise nicht erwartet haben.
In diesem Artikel wird erläutert, wie das Schlüsselwort return
funktioniert und wie es in Windows PowerShell richtig verwendet wird.
Verwenden des Schlüsselworts return
in PowerShell
Der folgende Skriptblock ist die Grundform der Syntax des Schlüsselworts return
.
return <expression>
Das Schlüsselwort return
kann alleine erscheinen, oder es kann ein Wert oder Ausdruck folgen. Allein das Schlüsselwort return
bringt die Befehlszeile zum vorherigen Aufrufpunkt zurück.
return
return $a
return (1 + $a)
Das folgende Beispiel verwendet das Schlüsselwort return
, um eine Funktion zu verlassen, wenn an einem bestimmten Punkt eine Bedingung erfüllt ist. In diesem Beispiel werden die ungeraden Zahlen nicht multipliziert, weil die return-Anweisung kommt, bevor diese Anweisung ausgeführt werden kann.
function MultiplyOnlyEven
{
param($num)
if ($num % 2) { return "$num is not even" }
$num * 2
return
}
1..10 | ForEach-Object {MultiplyOnlyEven -Num $_}
Ausgabe:
1 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 weist eine verwirrende Rückgabesemantik auf, wenn es aus einer eher nativen Programmierperspektive betrachtet wird. Es gibt zwei Hauptideen, die wir berücksichtigen müssen:
- Alle Ausgaben werden erfasst und zurückgegeben.
- Das Schlüsselwort return gibt einen logischen Ausgangspunkt an.
Vor diesem Hintergrund geben die folgenden paar Skriptblöcke den Wert der Variablen $a
zurück.
Schlüsselwort mit einem Ausdruck zurückgeben:
$a = "Hello World"
return $a
Schlüsselwort ohne Ausdruck zurückgeben:
$a = "Hello World"
$a
return
Das Schlüsselwort return
wird im zweiten Skriptblock ebenfalls nicht benötigt, da der Aufruf der Variablen in der Befehlszeile diese Variable explizit zurückgibt.
Rückgabewerte in der Pipeline in PowerShell
Wenn Sie einen Wert von Ihrem Skriptblock oder Ihrer Skriptfunktion zurückgeben, öffnet Windows PowerShell automatisch die Member und überträgt sie einzeln durch die Pipeline. Der Grund für diesen Anwendungsfall liegt in der Einzelverarbeitung von Windows PowerShell.
Die folgende Funktion zeigt, dass diese Idee ein Array von Zahlen zurückgibt.
function Test-Return
{
$array = 1,2,3
return $array
}
Test-Return | Measure-Object | Select-Object Count
Ausgabe:
Count
-----
3
Bei Verwendung des Cmdlets Test-Return
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 bei der Ausführung ist die zurückgegebene Anzahl drei.
Um einen Skriptblock oder eine Funktion dazu zu bringen, nur ein einzelnes Objekt an die Pipeline zurückzugeben, verwenden Sie eine der folgenden Methoden:
Verwenden von unären Array-Ausdrücken in PowerShell
Die Verwendung eines unären Ausdrucks kann Ihren Rückgabewert als einzelnes Objekt über die Pipeline senden, wie im folgenden Beispiel gezeigt.
function Test-Return
{
$array = 1,2,3
return (,$array)
}
Test-Return | Measure-Object | Select-Object Count
Ausgabe:
Count
-----
1
Verwendung von Write-Output
mit NoEnumerate
-Parameter in PowerShell
Wir können auch das Cmdlet Write-Output
mit dem Parameter -NoEnumerate
verwenden. Im folgenden Beispiel wird das Cmdlet Measure-Object
verwendet, um die Objekte zu zählen, die von der Beispielfunktion mit dem Schlüsselwort return
an die Pipeline gesendet werden.
Beispielcode:
function Test-Return
{
$array = 1,2,3
return Write-Output -NoEnumerate $array
}
Test-Return | Measure-Object | Select-Object Count
Ausgabe:
Count
-----
1
Eine weitere Methode, um die Pipeline zu zwingen, nur ein einzelnes Objekt zurückzugeben, wird in PowerShell Version 5 eingeführt, die wir im nächsten Abschnitt des Artikels besprechen werden.
Definieren von Klassen in PowerShell 5
Mit Windows PowerShell Version 5.0 können wir jetzt unsere benutzerdefinierten Klassen erstellen und definieren. Ändern Sie Ihre Funktion in eine Klasse, und das Schlüsselwort return
gibt nur das einzelne Objekt zurück, das ihr unmittelbar vorausgeht.
Beispielcode:
class test_class {
[int]return_what() {
Write-Output "Hello, World!"
return 1000
}
}
$tc = New-Object -TypeName test_class
$tc.return_what()
Ausgabe:
1000
Wenn die obige Klasse eine Funktion ist, gibt sie alle gespeicherten Werte in der Pipeline zurück.
Ausgabe:
Hello World!
1000
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn