J'ai un script PowerShell (2.0) en appelant un autre. Je veux recevoir non seulement la sortie principale, mais un objet supplémentaire que je peux utiliser séparément, par ex. pour afficher une ligne récapitulative dans un message.Retourne un objet de PowerShell en utilisant un paramètre (paramètre "Par référence")?
Ayons Test2.ps1 que le script appelé:
param([String]$SummaryLine)
$Issues = "Potentially long list of issues"
$SummaryLine = "37 issues found"
$Issues
Et Test1.ps1 comme le script qu'il appelle:
$MainOutput = & ".\Test2.ps1" -SummaryLine $SummaryOutput
$MainOutput
$SummaryOutput
La sortie est tout simplement:
Potentially long list of issues
Bien que le paramètre $ SummaryLine soit rempli par Test2, $ SummaryOutput reste indéfini dans Test1. La définition de $ SummaryOutput avant l'appel de Test2 n'aide pas;
il conserve juste la valeur assignée avant d'appeler Test2.
J'ai essayé de configurer $ SummaryOutput et $ SummaryLine en tant que variables [ref] (comme on peut apparemment le faire avec des fonctions), mais la propriété $ SummaryOutput.Value est $ null après avoir appelé Test2.
Est-il possible dans PowerShell de renvoyer une valeur dans un paramètre? Si non, quelles sont les solutions de contournement? Affectation directe d'une variable de portée parent dans Test2?
Vache sacrée, [ref] fonctionne! Quand j'ai essayé cela, j'ai assigné $ OptionalOutput plutôt que $ OptionalOutput.Value à l'intérieur du script appelé, donc $ x n'a pas été mis à jour dans le script appelant. Alors, que se passe-t-il dans votre deuxième approche? Si $ x est un PSObject, il est automatiquement passé comme [ref]? –
Je suggère d'utiliser [ref] et non la deuxième option. Dans PowerShell (en tant que .NET), les objets sont transmis par référence, mais les variables sont définies. Cela peut être difficile à comprendre au début, mais c'est vrai. – JasonMArcher
@JasonMArcher: Oui, j'aime [ref] pour être plus explicite. Ré. passer des objets, si tous les objets sont passés par référence, pourquoi cela ne fonctionne-t-il pas pour une chaîne (qui est un objet .NET Reference Type)? –