Valeur de retour dans PowerShell

Marion Paul Kenneth Mendoza 30 janvier 2023
  1. Utilisation du mot-clé return dans PowerShell
  2. Valeurs de retour dans le pipeline dans PowerShell
  3. Définition des classes dans PowerShell 5
Valeur de retour dans PowerShell

En général, le mot-clé return quitte une fonction, un script ou un bloc de script. Ainsi, par exemple, nous pouvons l’utiliser pour laisser une portée à un point spécifique, renvoyer une valeur ou indiquer que la fin de la portée a été atteinte.

Cependant, dans Windows PowerShell, l’utilisation du mot clé return peut être un peu déroutante car votre script peut imprimer une sortie à laquelle vous ne vous attendiez peut-être pas.

Cet article explique comment fonctionne le mot-clé return et comment les utiliser correctement dans Windows PowerShell.

Utilisation du 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 renverra 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 donné. Dans cet exemple, les nombres impairs ne sont pas multipliés car l’instruction de retour passe avant que cette instruction ne 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 $_}

Production :

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 lorsqu’il est vu d’un point de vue de programmation plus natif. Il y a deux idées principales que nous devons considérer :

  1. Toutes les sorties sont capturées et renvoyées.
  2. Le mot-clé return indique un point de sortie logique.

Cela étant dit, les deux blocs de script suivants renverront la valeur de la variable $a.

Mot-clé de retour avec une expression :

$a = "Hello World"
return $a

Mot-clé de retour sans expression :

$a = "Hello World"
$a
return

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

Valeurs de retour dans le pipeline dans PowerShell

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

La fonction suivante montre que cette idée renverra un tableau de nombres.

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

Production :

Count
-----
    3

Lors de l’utilisation de la cmdlet Test-Return, la sortie de la fonction ci-dessous est redirigée vers la cmdlet Measure-Object. la cmdlet comptera le nombre d’objets dans le pipeline et, une fois exécuté, le nombre renvoyé est de trois.

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

Utilisation de l’expression de tableau unaire dans PowerShell

L’utilisation d’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

Production :

Count
-----
    1

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

On peut aussi 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.

Exemple de code :

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

Production :

Count
-----
    1

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

Définition des classes dans PowerShell 5

Avec Windows PowerShell version 5.0, nous pouvons désormais créer et définir nos classes personnalisées. Changez votre fonction en classe, et le mot-clé return ne renverra que le seul objet qui le précède immédiatement.

Exemple de code :

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

Production :

1000

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

Production :

Hello World!
1000
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