我有这段代码
$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"
}
]
为什么哈希表值在添加后会在数组中更新?我以为+=
创建了数组的副本。
防止这种情况的最佳方法是什么? (即得到我正在寻找的结果!)
答案 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"
}
]