PowerShell
Verhalten in PowerShell zurückgeben
Suche…
Einführung
Es kann verwendet werden, um den aktuellen Bereich zu verlassen. Dies kann ein Funktions-, Skript- oder Skriptblock sein. In PowerShell wird das Ergebnis jeder Anweisung als Ausgabe zurückgegeben, auch ohne ein explizites Return-Schlüsselwort oder um anzuzeigen, dass das Ende des Bereichs erreicht wurde.
Bemerkungen
Weitere Informationen zur Rückkehrsemantik finden Sie auf der Seite about_Return in TechNet oder indem Sie get-help return
von einer PowerShell-Eingabeaufforderung aufrufen.
Bemerkenswerte Q & A-Fragen mit weiteren Beispielen / Erklärungen:
about_return auf MSDN erklärt es kurz und bündig:
Das Return-Schlüsselwort beendet einen Funktions-, Skript- oder Skriptblock. Es kann verwendet werden, um einen Bereich an einem bestimmten Punkt zu verlassen, einen Wert zurückzugeben oder um anzuzeigen, dass das Ende des Bereichs erreicht wurde.
Benutzer, die mit Sprachen wie C oder C # vertraut sind, möchten möglicherweise das Schlüsselwort Return verwenden, um die Logik des Verlassens eines Bereichs explizit zu machen.
In Windows PowerShell werden die Ergebnisse jeder Anweisung als Ausgabe zurückgegeben, auch ohne eine Anweisung, die das Return-Schlüsselwort enthält. Sprachen wie C oder C # geben nur den oder die Werte zurück, die im Schlüsselwort Return angegeben sind.
Vorzeitige Ausfahrt
function earlyexit {
"Hello"
return
"World"
}
"Hello" wird in die Ausgabepipeline eingefügt, "World" nicht
Erwischt! Rückkehr in die Pipeline
get-childitem | foreach-object { if ($_.IsReadOnly) { return } }
Pipeline-Cmdlets (z. ForEach-Object
, Where-Object
usw.) werden für Schließungen verwendet. Die Rückgabe hier wird nur zum nächsten Element in der Pipeline verschoben, nicht jedoch zum Beenden der Verarbeitung. Sie können break anstelle von return verwenden, wenn Sie die Verarbeitung beenden möchten.
get-childitem | foreach-object { if ($_.IsReadOnly) { break } }
Erwischt! Unerwünschte Ausgabe ignorieren
Inspiriert von
function bar {
[System.Collections.ArrayList]$MyVariable = @()
$MyVariable.Add("a") | Out-Null
$MyVariable.Add("b") | Out-Null
$MyVariable
}
Out-Null
ist erforderlich, da die .NET ArrayList.Add
Methode nach dem Hinzufügen die Anzahl der Elemente in der Auflistung zurückgibt. Wenn weggelassen, hätte die Pipeline 1, 2, "a", "b"
Es gibt mehrere Möglichkeiten, unerwünschte Ausgaben wegzulassen:
function bar
{
# New-Item cmdlet returns information about newly created file/folder
New-Item "test1.txt" | out-null
New-Item "test2.txt" > $null
[void](New-Item "test3.txt")
$tmp = New-Item "test4.txt"
}
Hinweis: Weitere Informationen dazu, warum > $null
bevorzugt wird, finden Sie unter [Thema wurde noch nicht erstellt].
Rückgabe mit einem Wert
(paraphrased von about_return )
Die folgenden Methoden haben die gleichen Werte in der Pipeline
function foo {
$a = "Hello"
return $a
}
function bar {
$a = "Hello"
$a
return
}
function quux {
$a = "Hello"
$a
}
Wie man mit Funktionen arbeitet, kehrt zurück
Eine Funktion gibt alles zurück, was nicht von etwas anderem erfasst wurde.
Wenn Sie das Schlüsselwort return verwenden , wird jede Anweisung nach der Zeile nicht ausgeführt.
So was:
Function Test-Function
{
Param
(
[switch]$ExceptionalReturn
)
"Start"
if($ExceptionalReturn){Return "Damn, it didn't work!"}
New-ItemProperty -Path "HKCU:\" -Name "test" -Value "TestValue" -Type "String"
Return "Yes, it worked!"
}
Testfunktion
Wird zurückkehren:
- Start
- Der neu erstellte Registrierungsschlüssel (weil einige Anweisungen zum Erstellen von Ausgaben führen, die Sie möglicherweise nicht erwarten)
- Ja, es hat funktioniert!
Test-Function -ExceptionalReturn Gibt zurück:
- Start
- Verdammt, es hat nicht funktioniert!
Wenn Sie es so machen:
Function Test-Function
{
Param
(
[switch]$ExceptionalReturn
)
. {
"Start"
if($ExceptionalReturn)
{
$Return = "Damn, it didn't work!"
Return
}
New-ItemProperty -Path "HKCU:\" -Name "test" -Value "TestValue" -Type "String"
$Return = "Yes, it worked!"
Return
} | Out-Null
Return $Return
}
Testfunktion
Wird zurückkehren:
- Ja, es hat funktioniert!
Test-Function -ExceptionalReturn Gibt zurück:
- Verdammt, es hat nicht funktioniert!
Mit diesem Trick können Sie die zurückgegebene Ausgabe selbst dann steuern, wenn Sie nicht sicher sind, was die einzelnen Anweisungen aussagen werden.
So funktioniert es
.{<Statements>} | Out-Null
das . macht den folgenden Scriptblock im Code enthalten
das {} markiert den Skriptblock
die | Out-Null leitet alle unerwarteten Ausgaben an Out-Null (damit sie weg sind!).
Da der Skriptblock enthalten ist, erhält er denselben Bereich wie der Rest der Funktion.
So können Sie auf Variablen zugreifen, die innerhalb des Skriptblocks gemacht wurden.