2011-08-26 15 views
13

私は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の価値を得られないことに気付くでしょう。私も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 

答えて

29

あなたはおそらくしようとしているでしょう:

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

を、私はあなたが出力の最後に.valueに気付かなかったと思います

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

の対応する出力を得ました。

​​

や使用文字列フォーマット、このような:

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

または文字列で$value = $obj1.valueと使用のような外の値を代入あなたがプロパティにアクセスしながら、このような何かをしなければならない文字列で

+0

はい、それでした。ありがとう! – Denis

+0

@Denis - あなたの問題を解決すれば答えとして受け入れてください! – manojlds

+0

どうすればいいですか? – Denis

関連する問題