mardi 1 octobre 2013

Ma fonction powershell retourne un tableau avec plusieurs éléments au lieu de l'objet demandé


Après un long débogage dans des scripts powershell je me sens obligé d'écrire un petit post sur ce blog. Cette session de débug aura au moins l'avantage de m'avoir appris ce qu'était le mot clé return en powershell et qu'il ne fallait pas se fier aux apparences !

Par exemple, la fonction :

function get-string
{
    'hello world' -match 'hello'
    return $Matches[0];
}
Que ce passera t-il si on appelle cette fonction dans le shell ? En tant que développeur C# je m'attendrai à avoir la valeur "hello" ou une chaîne de caractère.

Voici ce que me retourne la commande get-string:
True
hello
Deux valeurs ! Comment est-ce possible ? Je n'ai qu'un seul return dans ma fonction et la valeur $Matches[0] ne contient que la chaine "hello" si j'affiche cette valeur ou si j'ajoute un watcher sur cette variable. Que s'est-il donc passé ?

Si on prend le temps de lire la documentation about_return depuis le shell ou sur internet, on peut y lire que le mot clé return retourne également toutes sorties non interceptées. Le mot clé match retourne un booléen pour indiquer si un match a été réalisé ou non. Donc une donnée booléenne est envoyée et non récupérée dans la fonction. Cette donnée est donc ajoutée à la sortie de la fonction en plus de l'objet retourné via le mot clé return.

Aucun commentaire:

Enregistrer un commentaire