Arrays 在Powershell中,如何通过“值”而不是“引用”在数组中存储对象?

Arrays 在Powershell中,如何通过“值”而不是“引用”在数组中存储对象?,arrays,object,powershell,Arrays,Object,Powershell,在我的一个脚本中,我注意到当我将一个自定义对象存储在一个数组中,然后,如果我修改对象属性,所有的更改也会在数组中进行 有没有一种简单的方法来按值存储对象 我希望避免每次存储新对象的值时都重新创建它 例如: PS D:\wamp\www> $obj = New-Module -ScriptBlock { $var1="value1"; Export-ModuleMember -Variable * } -AsCustomObject PS D:\wamp\www> $arr = @()

在我的一个脚本中,我注意到当我将一个自定义对象存储在一个数组中,然后,如果我修改对象属性,所有的更改也会在数组中进行

有没有一种简单的方法来按值存储对象

我希望避免每次存储新对象的值时都重新创建它

例如:

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

添加到阵列时,请添加对象的副本:

$arr += $obj.PSObject.Copy()

添加到阵列时,请添加对象的副本:

$arr += $obj.PSObject.Copy()

最后,我在clone 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

最后,我在clone 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

可能重复感谢,我从这个主题中选择了一个解决方案!可能重复感谢,我从这个主题中选择了一个解决方案!我也尝试过这种复制,但问题是相同的:当我更新属性时,会在数组中进行更改。我也试过这样的方法:PS D:\wamp\www>$obj2=$obj.PSObject.Copy.var1=other PS D:\wamp\www>$arr+=$obj2 PS D:\wamp\www>$arr var1-otherother@plunkets-你在评论中所说的不是很清楚,从我看来是错误的。用正确的格式更新你的问题。我也尝试过这个副本,但问题是一样的:当我更新属性时,数组中会发生更改。我也试过这样的方法:PS D:\wamp\www>$obj2=$obj.PSObject.Copy.var1=other PS D:\wamp\www>$arr+=$obj2 PS D:\wamp\www>$arr var1-otherother@plunkets-你在评论中所说的不是很清楚,从我看来是错误的。用你想说的内容更新你的问题,并采用适当的格式。