powershell:如何从[ref]变量写入主机值

时间:2011-08-26 01:27:17

标签: function powershell ref

我是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但是生成相同的响应。

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 个答案:

答案 0 :(得分:34)

你可能会尝试过:

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之外指定值,并在字符串中使用。