Valeur de retour dans PowerShell
-
Utilisation du mot-clé
return
dans PowerShell - Valeurs de retour dans le pipeline dans PowerShell
- Définition des classes dans PowerShell 5
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 :
- Toutes les sorties sont capturées et renvoyées.
- 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn