当指定给Powershell的另一个变量发生更改时,防止Powershell更新原始变量

当指定给Powershell的另一个变量发生更改时,防止Powershell更新原始变量,powershell,Powershell,这是一个演示代码。当我在函数中操作$tempHash时,$ReferenceHash也会不断变化。我认为这是因为它使用相同的内存位置。我希望防止这种行为,以便在代码后面使用$RefenceHash将$tempHash的值还原为原始值 也许是简单的事情,但我该怎么做呢 $ReferenceHash = @{PD="PROD";NP="NonProd";SB="Sandbox"} $tempHash = $ReferenceHash $value = "SB" function Spit-NewH

这是一个演示代码。当我在函数中操作
$tempHash
时,
$ReferenceHash
也会不断变化。我认为这是因为它使用相同的内存位置。我希望防止这种行为,以便在代码后面使用
$RefenceHash
$tempHash
的值还原为原始值

也许是简单的事情,但我该怎么做呢

$ReferenceHash = @{PD="PROD";NP="NonProd";SB="Sandbox"}
$tempHash = $ReferenceHash
$value = "SB"

function Spit-NewHash ($tmp, $val)
{
    $tmp.remove($val)
    Return $tmp
}
$hash = Spit-NewHash -tmp $tempHash -val $value

$ReferenceHash

我想你要找的是
Clone()

回应是

Name                           Value                                                                                                                                                                                                                                                                           
----                           -----                                                                                                                                                                                                                                                                           
NP                             NonProd                                                                                                                                                                                                                                                                         
SB                             Sandbox                                                                                                                                                                                                                                                                         
PD                             PROD

我想你要找的是
Clone()

回应是

Name                           Value                                                                                                                                                                                                                                                                           
----                           -----                                                                                                                                                                                                                                                                           
NP                             NonProd                                                                                                                                                                                                                                                                         
SB                             Sandbox                                                                                                                                                                                                                                                                         
PD                             PROD

$ReferenceHash
$tempHash
均未更改。它们所指的
哈希表
。解决方法是不要让它们引用相同的
哈希表
实例。您需要将第一个实例复制到第二个实例。赋值所做的只是创建对第一个的新引用。
$tempHash=$ReferenceHash
-->
$tempHash=$ReferenceHash.Clone()
$tempHash
都没有更改。它们所指的
哈希表
。解决方法是不要让它们引用相同的
哈希表
实例。您需要将第一个实例复制到第二个实例。赋值所做的只是创建对第一个的新引用。
$tempHash=$ReferenceHash
-->
$tempHash=$ReferenceHash.Clone()