PowerShell a une sémantique de retour vraiment bizarre, du moins lorsqu'on l'envisage d'un point de vue de programmation plus traditionnel. Il y a deux idées principales à prendre en compte :
- Toutes les sorties sont capturées et renvoyées
- Le mot clé return indique simplement un point de sortie logique.
Ainsi, les deux blocs script suivants feront effectivement exactement la même chose :
$a = "Hello, World"
return $a
$a = "Hello, World"
$a
return
La variable $a dans le deuxième exemple est laissée en sortie sur le pipeline et, comme mentionné, toute la sortie est retournée. En fait, dans le deuxième exemple, vous pourriez omettre complètement le retour et vous obtiendriez le même comportement (le retour serait implicite car la fonction se termine naturellement et sort).
Sans plus de détails sur la définition de votre fonction, je ne peux pas dire pourquoi vous obtenez un objet PSMethod. Je pense que vous avez probablement quelque chose quelques lignes plus haut qui n'est pas capturé et qui est placé dans le pipeline de sortie.
Il convient également de noter que vous probablement n'ont pas besoin de ces points-virgules, sauf si vous imbriquez plusieurs expressions sur une seule ligne.
Vous pouvez en savoir plus sur la sémantique des retours sur le site Web de la Commission européenne. about_Return sur TechNet, ou en invoquant l'option help return
à partir de PowerShell lui-même.
3 votes
Peut-on voir la déclaration de la fonction ?
1 votes
Non, pas l'invocation de la fonction, montrez-nous comment/où vous avez déclaré "MaFonction". Ce qui se passe quand vous le faites : La fonction "Get-Item" : \MyFunction
1 votes
J'ai suggéré une autre façon d'aborder cette question : stackoverflow.com/a/42842865/992301
1 votes
Je pense que c'est l'une des questions PowerShell les plus importantes sur stack overflow concernant les fonctions/méthodes. Si vous avez l'intention d'apprendre le langage de script PowerShell, vous devriez lire cette page en entier et la comprendre en profondeur. Vous vous détesterez plus tard si vous ne le faites pas.
0 votes
L'utilisation de fonctions de classe statiques me semble être la solution propre et appropriée, comme dans cette réponse : stackoverflow.com/a/42743143/1915920