私は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の値を取得していないことに気付くでしょう。また、write-Hostの呼び出しで$ 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
あなたはおそらく試したでしょう:
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
などの外部の値を割り当てて、文字列で使用します。