更新对象时更新数组对象副本

时间:2016-08-17 11:25:52

标签: powershell

我有这段代码

$subnet = @{
    name = 'subnet-1'
    properties = @{
        addressPrefix = '10.0.0.0/24'
    }
}

$array = @() 

$array += $subnet 

$subnet.properties.addressPrefix = '10.1.0.0/24' 

$array += $subnet 

$array  | ConvertTo-Json

其中提供以下输出

[
    {
        "properties":  {
                           "addressPrefix":  "10.1.0.0/24"
                       },
        "name":  "subnet-1"
    },
    {
        "properties":  {
                           "addressPrefix":  "10.1.0.0/24"
                       },
        "name":  "subnet-1"
    }
]

为什么哈希表值在添加后会在数组中更新?我以为+=创建了数组的副本。

防止这种情况的最佳方法是什么? (即得到我正在寻找的结果!)

1 个答案:

答案 0 :(得分:2)

复制哈希表时,PowerShell使用引用,因此您需要Clone来强制它进行复制:

$array += $subnet

$subnet2 = $subnet.Clone()
$subnet2.properties = $subnet.properties.Clone()
$subnet2.properties.addressPrefix = '10.1.0.0/24' 

$array += $subnet2

然后结果是:

[
    {
        "properties":  {
                           "addressPrefix":  "10.0.0.0/24"
                       },
        "name":  "subnet-1"
    },
    {
        "properties":  {
                           "addressPrefix":  "10.1.0.0/24"
                       },
        "name":  "subnet-1"
    }
]