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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow