2

私のスクリプトの 1 つで、カスタム オブジェクトを 1 つの配列に格納し、オブジェクトのプロパティを変更すると、すべての変更が配列にも反映されることに気付きました。

オブジェクトを値で保存する簡単な方法はありますか?

値を保存するたびに新しいオブジェクトを再作成することを避けたいです。

例:

PS D:\wamp\www> $obj = New-Module -ScriptBlock { $var1="value1"; Export-ModuleMember -Variable * } -AsCustomObject
PS D:\wamp\www> $arr = @()
PS D:\wamp\www> $arr += $obj
PS D:\wamp\www> $arr

var1
----
value1


PS D:\wamp\www> $obj.var1 = "newvalue"
PS D:\wamp\www> $arr += $obj
PS D:\wamp\www> $arr

var1
----
newvalue
newvalue

PS D:\wamp\www> $obj2 = $obj.Psobject.Copy()
PS D:\wamp\www> $obj2.var1 = "other"
PS D:\wamp\www> $arr += $obj2
PS D:\wamp\www> $arr

var1
----
other
other
4

2 に答える 2

0

最後に、「psobject の複製」トピックで (非常に単純な) 解決策を選びselect *ます。配列に値を追加するときに を使用します。「カスタム オブジェクト」も作成しますが、「psobject.copy」メソッドとは異なり、「ポインタ」は作成しません。

PS D:\wamp\www> $m = New-Module -AsCustomObject -ScriptBlock { $var = "val"; Export-ModuleMember -Variable * }
PS D:\wamp\www> $arr += @()
PS D:\wamp\www> $arr += $m | Select *
PS D:\wamp\www> $m.var = "other"
PS D:\wamp\www> $arr += $m | Select *
PS D:\wamp\www> $arr

var
---
val
other
于 2013-08-04T07:58:13.850 に答える