web-dev-qa-db-fra.com

powershell: comment écrire la valeur de l'hôte à partir de la variable [ref]

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
18
Denis

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.

38
manojlds