powershell: как записать значение хоста из переменной [ref] - PullRequest
16 голосов
/ 26 августа 2011

Я новичок в Powershell и пытаюсь понять, как вывести значение переменной [ref] из функции.

Вот мой тестовый код:

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"

Вывод, полученный из этого теста, следующий.Вы заметите, что я не получаю значение $ obj1, как я надеялся.Я также попытался передать $ obj1.value в вызове write-host, но это вызвало тот же ответ.

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

1 Ответ

36 голосов
/ 26 августа 2011

Вы, вероятно, попытались бы:

write-host "the new value is $obj1.value"

и получили бы соответствующий вывод

the new value is System.Management.Automation.PSReference.value

Я думаю, вы не заметили .value в конце вывода.

В строках вы должны сделать что-то подобное при доступе к свойствам:

write-host "the new value is $($obj1.value)"

Или использовать строковый формат, например:

write-host ("the new value is {0}" -f $obj1.value)

Или присвоить значение снаружи как $value = $obj1.value и использовать в строке.

...