PowerShell ExpandoObject を関数へ参照渡しするサンプル

[ref]が必要かと思ったら、そのまま渡すのが正解だった。

PowerShellでは、上記定義すると、$MyClassAに格納されているのは、 [system.Dynamic.ExpandoObject]で生成するオブジェクトのポインタなのだろう。

それを引数に渡すから、[ref]を指定しなくてもいいのだろうと解釈しました。

[int]$global:index = 0
function MyFunc()
{
param([system.Dynamic.ExpandoObject]$obj)
$global:index += 1
[string]$obj.MyValue = "MyFunc Exec No=" + $index + (Get-Date -f " yyyy/MM/dd/ hh:mm:ss").ToString()
}
function MyFuncForValue()
{
param([system.Dynamic.ExpandoObject]$obj)
$global:index += 1
[string]$obj.MyValue = "MyFuncForValue Exec No=" + $index + (Get-Date -f " yyyy/MM/dd/ hh:mm:ss").ToString()
}
[system.Dynamic.ExpandoObject]$MyClassA = [system.Dynamic.ExpandoObject]::new()
$MyClassA.MyValue = "Init MyClassA MyValue"
Write-Host $MyClassA.MyValue
MyFunc $MyClassA
Write-Host $MyClassA.MyValue
MyFuncForValue($MyClassA)
Write-Host $MyClassA.MyValue
[system.Dynamic.ExpandoObject]$MyClassB = [system.Dynamic.ExpandoObject]::new()
$MyClassB.MyValue = "Init MyClassB MyValue"
Write-Host $MyClassB.MyValue
MyFunc $MyClassB
Write-Host $MyClassB.MyValue
MyFuncForValue($MyClassB)
Write-Host $MyClassB.MyValue

実行結果

コメント

zh-CNenfrja
タイトルとURLをコピーしました