2014-08-27 4 views
0

스크립트를 작성 중이며 코드 섹션에 문제가 있습니다. VCenter에있는 모든 컴퓨터 목록을 전달하면 스크립트는 $ result 개체를 서버 목록과 포함 된 모든 정보로 올바르게 채 웁니다. 오류가있는 경우 (VCenter에서 서버를 찾을 수없는 경우) 반환되는 유일한 것은 오류 줄입니다 (여러 오류가있는 경우 마지막 오류 만 $ 결과에 있음). 이 문제를 해결하기 위해 내가 할 수있는 아이디어가 있습니까?PowerCLI Get-VM 출력

Get-VM 문을 foreach 루프로 묶었지만 VCenter에 한 번에 하나의 서버를 전달할 때 매우 오랜 시간이 걸리는 것으로 알고 있습니다.

try { 
     $operation = Get-VM -Name $computers -ErrorAction Stop | Restart-VMGuest -Confirm:$false 
     foreach ($comp in $operation) { 
      $result += [pscustomobject] @{ 
       Server = $computer 
       Status = $True 
       Error = $False 
       ErrorMessage = $null 
       Stamp = Get-Date 
       } 
      } 
     } 
    catch { 
     $result += [pscustomobject] @{ 
      Server = $computer 
      Status = $False 
      Error = $True 
      ErrorMessage = $_ 
      Stamp = Get-Date 
      } 
     } 
+0

을 모르는 하나의 오류. – arco444

+0

확인. 그래서 명령의 결과를 수집하고 오류를 처리해야합니까? 나는 지금 내가 그것을 할 지 확신하지 못한다. – Acerbity

+1

유일한 방법은 foreach 내부에'Get-VM'을 넣는 방법입니다. '-ErrorAction' 환경 설정을 변경하여 어딘가에 도착할 수도 있지만, catch 블록이 실행되지 않아서 오류를 판별하는 다른 방법을 찾아야합니다. – arco444

답변

0

나는 try/catch가 잘못된 위치에 있다고 생각합니다. 어쩌면 if/else 문을 foreach에 넣으면이 작업이 가능합니까? 당신이 오직 볼 것이다, 그래서
하지만, 오류가의`얻기-VM` 작업에 컬렉션없는 결과입니다 ... $comperror 도중 있는지 확인하는 방법을

$operation = Get-VM -Name $computers -ErrorAction Stop | Restart-VMGuest -Confirm:$false 

foreach ($comp in $operation) { 
    If ($comp -eq "??error??") { 
     $result += [pscustomobject] @{ 
      Server = $computer 
      Status = $True 
      Error = $False 
      ErrorMessage = $null 
      Stamp = Get-Date 
      } 
    } 
    Else { 
     $result += [pscustomobject] @{ 
       Server = $computer 
       Status = $False 
       Error = $True 
       ErrorMessage = $_ 
       Stamp = Get-Date 
       } 
      } 
    } 
관련 문제