Recherche…


Introduction

Il peut être utilisé pour quitter la portée actuelle, qui peut être une fonction, un script ou un bloc de script. Dans PowerShell, le résultat de chaque instruction est renvoyé en tant que sortie, même sans mot-clé Return explicite ou pour indiquer que la fin de la portée a été atteinte.

Remarques

Vous pouvez en savoir plus sur la sémantique de retour sur la page about_Return de TechNet ou en appelant get-help return partir d'une invite PowerShell.


Question (s) Q & A notable (s) avec plus d'exemples / d'explications:


about_return sur MSDN l'explique succinctement:

Le mot-clé Return permet de quitter une fonction, un script ou un bloc de script. Il peut être utilisé pour quitter une étendue à un point spécifique, pour renvoyer une valeur ou pour indiquer que la fin de la portée a été atteinte.

Les utilisateurs familiarisés avec des langages tels que C ou C # peuvent vouloir utiliser le mot-clé Return pour rendre la logique de laisser une portée explicite.

Dans Windows PowerShell, les résultats de chaque instruction sont renvoyés en tant que sortie, même sans instruction contenant le mot clé Return. Les langages comme C ou C # renvoient uniquement la ou les valeurs spécifiées par le mot-clé Return.

Sortie anticipée

function earlyexit {
    "Hello"
    return
    "World"
}

"Bonjour" sera placé dans le pipeline de sortie, "Monde" ne sera pas

Je t'ai eu! Retour dans le pipeline

get-childitem | foreach-object { if ($_.IsReadOnly) { return } } 

Les applets de commande de pipeline (par exemple, ForEach-Object , Where-Object , etc.) fonctionnent sur les fermetures. Le retour ici ne déplacera que le prochain élément du pipeline, et ne quittera pas le traitement. Vous pouvez utiliser break au lieu de return si vous souhaitez quitter le traitement.

get-childitem | foreach-object { if ($_.IsReadOnly) { break } } 

Je t'ai eu! Ignorer les sorties indésirables

Inspiré par

function bar {
 [System.Collections.ArrayList]$MyVariable = @()
 $MyVariable.Add("a") | Out-Null
 $MyVariable.Add("b") | Out-Null
 $MyVariable
}

Le Out-Null est nécessaire car la méthode .NET ArrayList.Add renvoie le nombre d'éléments dans la collection après l'ajout. Si omis, le pipeline aurait contenu 1, 2, "a", "b"

Il existe plusieurs façons d'omettre les sorties indésirables:

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"
}

Remarque: pour en savoir plus sur les raisons de préférer > $null , voir [sujet non encore créé].

Retour avec une valeur

(paraphrasé de about_return )

Les méthodes suivantes auront les mêmes valeurs sur le pipeline

function foo {
    $a = "Hello"
    return $a
}

function bar {
    $a = "Hello"
    $a
    return
} 

function quux {
    $a = "Hello"
    $a
} 

Comment travailler avec les fonctions retourne

Une fonction renvoie tout ce qui n'est pas capturé par autre chose.
Si vous utilisez le mot-clé return , chaque instruction après la ligne de retour ne sera pas exécutée!

Comme ça:

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!"
}

Fonction de test
Reviendra:

  • Début
  • La clé de registre nouvellement créée (ceci est dû au fait que certaines instructions créent une sortie inattendue)
  • Oui, ça a marché!

Test-Function -ExceptionalReturn Reviendra:

  • Début
  • Bon sang, ça n'a pas marché!

Si vous le faites comme ceci:

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
}

Fonction de test
Reviendra:

  • Oui, ça a marché!

Test-Function -ExceptionalReturn Reviendra:

  • Bon sang, ça n'a pas marché!

Avec cette astuce, vous pouvez contrôler la sortie renvoyée, même si vous n'êtes pas sûr de la nature de chaque instruction.

Ça marche comme ça

.{<Statements>} | Out-Null

la . rend le scriptblock suivant inclus dans le code
le {} marque le bloc de script
le | Out-Null pousse toute sortie inattendue vers Out-Null (donc c'est parti!)
Parce que le scriptblock est inclus, il obtient la même étendue que le reste de la fonction.
Vous pouvez donc accéder aux variables qui ont été créées dans le scriptblock.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow