arrays - 在Powershell中,如何通过 “value”而不是 “reference”将对象存储在数组中?

标签 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> $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()

http://msdn.microsoft.com/en-us/library/system.management.automation.psobject.copy(v=vs.85).aspx

关于arrays - 在Powershell中,如何通过 “value”而不是 “reference”将对象存储在数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034689/

相关文章:

objective-c - 如何播放选择器选择的许多声音?

PHP 检查 $_POST

javascript - _.initial 和 _.dropRight 有什么区别?

javascript - 这个javascript声明是数组还是某种对象

java - 将对象添加到数组

c# - 我可以使用 .Net Standard 库中的 PowerShell 类在 .Net Framework 项目 (exe) 中使用吗

c# - Powershell:无法与 .Net 程序集中存储的表单交互

c - 函数的隐式声明在 C99 中无效

javascript - 使用javascript替换带有连字符的字符串

powershell - 点源失败 oin powergui