Je suis nouveau sur Powershell et j'essaie de savoir comment imprimer la valeur d'une variable [ref] à partir d'une fonction.
Voici mon code de test:
function testref([ref]$obj1) {
$obj1.value = $obj1.value + 5
write-Host "the new value is $obj1"
$obj1 | get-member
}
$foo = 0
"foo starts with $foo"
testref([ref]$foo)
"foo ends with $foo"
La sortie que j'obtiens de ce test est la suivante. Vous remarquerez que je n'obtiens pas la valeur de $ obj1 comme je l'espérais. J'ai également essayé de passer $ obj1.value dans l'appel à write-Host mais cela a généré la même réponse.
PS > .\testref.ps1
foo starts with 0
the new value is System.Management.Automation.PSReference
TypeName: System.Management.Automation.PSReference
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Value Property System.Object Value {get;set;}
foo ends with 5
Vous auriez probablement essayé:
write-Host "the new value is $obj1.value"
et a obtenu la sortie correspondante de
the new value is System.Management.Automation.PSReference.value
Je pense que vous n'avez pas remarqué le .value
à la fin de la sortie.
Dans les chaînes, vous devez faire quelque chose comme ceci lors de l'accès aux propriétés:
write-Host "the new value is $($obj1.value)"
Ou utilisez un format de chaîne, comme ceci:
write-Host ("the new value is {0}" -f $obj1.value)
Ou attribuez une valeur à l'extérieur comme $value = $obj1.value
et utiliser dans la chaîne.