열거되지 않는 개체를 수정할 때 :오류 나는 다음과 같은 스크립트를 한
$serverList = @{
"Server1Name" = @{ "WindowsService1" = "Status"; "WindowsService2" = "Status" };
"Server2Name" = @{ "WindowsService1" = "Status"; "WindowsService2" = "Status" };
"Server3Name" = @{ "WindowsService1" = "Status" };
"Server4Name" = @{ "WindowsService1" = "Status" };
"Server5Name" = @{ "WindowsService1" = "Status" };
"Server6Name" = @{ "WindowsService1" = "Status" }
}
$copy = $serverList.Clone()
foreach ($server in $copy.Keys) {
foreach ($service in $copy[$server].Keys) {
$serviceInfo = Get-Service -ComputerName $server -Name $service
$serverList[$server][$service] = $serviceInfo.Status
}
}
은 내가 열거되고있는 해시 테이블을 수정하지 오전 확인했다,하지만 내가 실행할 때 아직 나는 아직도이 오류가 스크립트 :
Collection was modified; enumeration operation may not execute.At line:14 char:14
+ foreach ($service in $copy[$server].Keys) {
+ ~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException
나는 여기에서 이것을 읽었다 : http://blog.matticus.net/2013/11/powershell-clearing-values-within.html. 코드 양식을 복사하면 오류없이 실행됩니다.
내 문제는 중첩 된 foreach 루프와 관련이 있습니까? 내 코드에 실수가 있습니까? 누구든지 이것에 대해 어떤 생각을 밝힐 수 있습니까?
와우, 멋진 대답 라인을
를 교체해야합니다. 매력처럼 일했습니다. –
해결 방법을 제공해 주셔서 감사합니다. 나만인가, 아니면 PowerShell의 나쁜 특징입니까? 나는 그것의 일부가 아닌 전체 객체를 복제하기를 원합니다 ... –
아니요, 기본 프레임 워크가 콜렉션을 처리하는 방식에 내재되어 있습니다. 닷넷에서 똑같은 문제점을 겪을 것이다. (사실, 나는 C# 녀석이다. 그러나 powershell도 똑같이 작동한다는 것을 안다.) Naively, "Keys"속성을 변경하지 않으므로 괜찮을 것입니다. 그러나 .Keys는 아마도 KeyValue 객체에 대한 반복이며 KeyValueObject.Value를 변경하고 있으므로 프레임 워크는 반복되는 컬렉션을 수정 한 것으로 간주합니다. – Tewr