25

私は 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
4

1 に答える 1

54

あなたはおそらく試したでしょう:

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)

または、likeの外部に値を割り当て$value = $obj1.value、文字列で使用します。

于 2011-08-26T01:46:53.550 に答える