2016-08-17 2 views
0

У меня есть этот кусок кодамассив обновления объекта копирования, когда обновляется объект

$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" 
    } 
] 

Почему после того, как он был добавлен обновление Хеш значение в массиве ? Я думал, что += создал копию массива.

Каков наилучший способ предотвратить это? (Т.е. получить результат я ищу!)

ответ

2

При копировании таблиц Hash, 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" 
    } 
]