제목이 분명하지 않으며 그 사실을 사과드립니다. 나는 쓰고있는 스크립트로 약간의 문제를 겪었고 무슨 일이 일어나고 있는지 알아내는 데 도움이되기를 바라고있다. 문제를 해결하는 방법을 알아 냈습니다. 을 찾으십니까?이 문제가 발생했습니다. 스크립트의 길이는 3k 줄을 넘었지만, 아래에 쓴 스크립트는 같은 문제를 재현합니다.루프 외부의 두 번째 해시 테이블에서 PowerShell 해시 테이블 값이 제거됨
세 개의 해시 테이블, DeviceList, AllDevices 및 RemovedDevices가 있습니다. Devicelist는 명시 적으로 배치되고 AllDevices는 DeviceList와 같습니다. 루프 내에서 RemovedDevices에있는 항목은 DeviceList에서 제거됩니다. 이 샘플에서는 AllDevices가 처음 수정되었을지라도 장치는 여전히이 장치에서 제거됩니다. 위의 텍스트를 실행
$DeviceList = @{"server1" = "email1"; "server2" = "email2"; "server3" = "email3"}
$AllDevices = $DeviceList
$RemovedDevices = @{"server1" = "email1"; "server2" = "email2"}
foreach($RemovedDevice in $RemovedDevices.GetEnumerator())
{
$DeviceList | where {$_.ContainsKey($RemovedDevice.Key)} | % {$_.Remove($RemovedDevice.Key)}
}
$AllDevices
은 $ AllDevices는 여전히 3 개 서버를 포함해야하는 서버 3 정보를 포함하도록 수정됩니다.
내가 두 번째 줄을 수정하는 경우 :
$AllDevices += $DeviceList
그런 다음 AllDevices는 3 개 값을 유지합니다. 중단 점을 사용하고 첫 번째 버전을 단계별로 실행하면서 처음으로 AllDevices가 적중하지 않았 음을 확인했습니다.
내 전반적인 질문은 다음과 같습니다. 루프가 완료된 후 AllDevices가 DeviceList와 동일한 것으로 수정되는 이유는 무엇입니까? 처음에 한 번만 호출되면 DeviceList를 수정해도 값이 정적으로 유지되지 않아야합니까? 유사한 방법을 사용하여 배열을 재구성해도 AllDevices를 덮어 쓰지 않으므로 해시 테이블과 유사합니다.
PSVersion 루프가 완료된 후가 동일 AllDevices DeviceList로 수정되는 이유 5.0.10586.117
그런 식으로하면 레퍼런스 일뿐 별개의 개체가 아닙니다. 귀하의 설명에 진심으로 감사드립니다! – Nick