Comment retourner une valeur dans PowerShell

  1. Utiliser le mot-clé return dans PowerShell
  2. Valeurs de retour dans le pipeline dans PowerShell
  3. Définir des classes dans PowerShell 5
Comment retourner une valeur dans PowerShell

En général, le mot-clé return quitte une fonction, un script ou un bloc de script. Par exemple, nous pouvons l’utiliser pour quitter un étendue à un moment spécifique, retourner une valeur ou indiquer que la fin de l’étendue a été atteinte.

Cependant, dans Windows PowerShell, utiliser le mot-clé return peut être un peu déroutant car votre script peut imprimer une sortie que vous ne vous attendiez pas.

Cet article discutera de la façon dont le mot-clé return fonctionne et comment les utiliser correctement dans Windows PowerShell.

Utiliser le mot-clé return dans PowerShell

Le bloc de script ci-dessous est la forme de base de la syntaxe du mot-clé return.

return <expression>

Le mot-clé return peut apparaître seul, ou une valeur ou une expression peut le suivre. Le mot-clé return seul retournera la ligne de commande à son point d’appel précédent.

return
return $a
return (1 + $a)

L’exemple ci-dessous utilise le mot-clé return pour quitter une fonction si une condition est remplie à un moment spécifique. Dans cet exemple, les nombres impairs ne sont pas multipliés car l’instruction de retour se situe avant que cette instruction puisse s’exécuter.

function MultiplyOnlyEven {
    param($num)

    if ($num % 2) { return "$num is not even" }
    $num * 2
    return
}

1..10 | ForEach-Object { MultiplyOnlyEven -Num $_ }

Sortie :

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 a une sémantique de retour déroutante vue d’une perspective de programmation plus native. Il y a deux idées principales que nous devons considérer :

  1. Toute sortie est capturée et renvoyée.
  2. Le mot-clé return indique un point de sortie logique.

Cela dit, les deux blocs de script suivants retourneront la valeur de la variable $a.

Mot-clé Return avec une expression :

$a = "Hello World"
return $a

Mot-clé Return sans expression :

$a = "Hello World"
$a
return

Le mot-clé return n’est également pas nécessaire dans le deuxième bloc de script, car appeler la variable dans la ligne de commande renverra explicitement cette variable.

Valeurs de retour dans le pipeline dans PowerShell

Lorsque vous renvoyez une valeur de votre bloc de script ou fonction, Windows PowerShell extrait automatiquement les membres et les pousse un par un à travers le pipeline. La raison de ce cas d’utilisation est due au traitement un par un de Windows PowerShell.

La fonction suivante démontre cette idée qui retournera un tableau de nombres.

function Test-Return {
    $array = 1, 2, 3
    return $array
}
Test-Return | Measure-Object | Select-Object Count

Sortie :

Count
-----
    3

En utilisant la cmdlet Test-Return, la sortie de la fonction ci-dessous est envoyée à la cmdlet Measure-Object. La cmdlet comptera le nombre d’objets dans le pipeline, et, une fois exécutée, le compte retourné est trois.

Pour faire en sorte qu’un bloc de script ou une fonction ne retourne qu’un seul objet au pipeline, utilisez l’une des méthodes suivantes :

Utilisation de l’expression de tableau unaire dans PowerShell

Utiliser une expression unaire peut envoyer votre valeur de retour dans le pipeline en tant qu’objet unique, comme le montre l’exemple suivant.

function Test-Return {
    $array = 1, 2, 3
    return (, $array)
}
Test-Return | Measure-Object | Select-Object Count

Sortie :

Count
-----
    1

Utiliser Write-Output avec le paramètre NoEnumerate dans PowerShell

Nous pouvons également utiliser la cmdlet Write-Output avec le paramètre -NoEnumerate. L’exemple ci-dessous utilise la cmdlet Measure-Object pour compter les objets envoyés au pipeline à partir de la fonction d’exemple par le mot-clé return.

Code d’exemple :

function Test-Return {
    $array = 1, 2, 3
    return Write-Output -NoEnumerate $array
}
Test-Return | Measure-Object | Select-Object Count

Sortie :

Count
-----
    1

Une autre méthode pour forcer le pipeline à ne retourner qu’un seul objet est introduite dans la version 5 de PowerShell, que nous discuterons dans la section suivante de l’article.

Définir des classes dans PowerShell 5

Avec Windows PowerShell version 5.0, nous pouvons maintenant créer et définir nos classes personnalisées. Transformez votre fonction en une classe, et le mot-clé return ne retournera que l’objet unique qui le précède immédiatement.

Code d’exemple :

class test_class {
    [int]return_what() {
        Write-Output "Hello, World!"
        return 1000
    }
}
$tc = New-Object -TypeName test_class
$tc.return_what()

Sortie :

1000

Si la classe ci-dessus est une fonction, elle retournera toutes les valeurs stockées dans le pipeline.

Sortie :

Hello World!
1000
Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn