2013-01-24 2 views
2

PowerShell 스크립트를 작성하여 라이브 마이그레이션을 사용하여 VM을 지정된 호스트에서 다른 클러스터 호스트로 순차적으로 이동시킵니다.PowerShell cmdlet (Move-VM) 결과를 어떻게 억제합니까?

작동 명령은 VirtualMachineManager 모듈의 일부인 Move-VM (또는 Move-SCVirtualMachine)입니다. 그러나이 cmdlet을 실행하면 결과를 항상 표시하지 않도록 콘솔에 반환합니다. 명령이 반환하는 정보를 잃고 싶지 않습니다.

는 것 두 명령의 결과가 성공 또는 실패 여부를 콘솔에 정보를 반환

Move-VM -VM $vmToMigrate -VMHost $destinationHost

$move = (Move-VM -VM $vmToMigrate -VMHost $destinationHost)

명령. 내 스크립트는 $move에 저장된 결과에 따라 진행하는 방법에 대한 논리를 통합하므로 Move-VM의 결과를 원합니다. 단지 콘솔에 표시하지 않으려 고합니다. 나는

($move = (Move-VM -VM $vmToMigrate -VMHost $destinationHost)) | out-null

을 시도했지만 Move-VM에 의해 반환 된 어떠한 정보도 캡처되지 않습니다; $move의 값은 null입니다.

Move-VM에 의해 반환 된 결과를 저장하는 가장 좋은 방법은 cmdlet이 반환하는 내용을 완전히 삭제하지 않고 콘솔에 대한 출력을 억제하는 것입니다. 스크립트 출력을 피하려고합니다. this.

감사합니다.

업데이트 :

  1. 나는 -ErrorAction SilentlyContinue를 사용하거나 $ErrorActionPreference 설정을 시도했지만 에러가 발생했을 경우, 다음 출력이 $move에 저장되지 않습니다. 나는 여전히 Move-VM의 출력을 원할 것이므로 $move을 검사하고 다른 유형의 실패를 기반으로 다른 논리를 실행할 수 있습니다.

  2. VMM의 유지 관리 모드에서 수행하는 작업 (기본적으로 호스트에서 모든 VM을 비우고 클러스터의 다른 위치로 마이그레이션)을 수행하려고합니다. 그러나 VMM 2012 SP1은 한 번에 여러 VM을 서버 2008R2 호스트간에 마이그레이션하려고 시도합니다.이 호스트는 한 번에 & 개의 마이그레이션을 1 개 이상 지원할 수 없습니다. 따라서 마이그레이션이 실패하고 VMM은 다른 마이그레이션 그룹을 다시 실행하려고 시도합니다. 기본적으로 VMM은 오류 루프에 빠지게됩니다. 이 스크립트는 프로그래밍 방식으로 한 번에 하나의 VM 만 마이그레이션하는 것을 방지합니다.

+0

2 질문 :이 실패하면 나는 항상 같은 [void] 내 함수 호출을 앞에 그 오류 (왜냐하면'-ErrorAction SilentlyContinue'. :)를 사용하여 해결 되었기 때문입니다. 또한 출력을 가질 수없는 이유는 무엇입니까? 상태 업데이트는 시간이 걸릴 때 해를 끼치 지 않으며, 바탕 화면이나 예약 된 작업의 바로 가기에서 실행하면 어쨌든 완료 될 때 표시되지 않습니다. –

+0

안녕 Graimer, 나는 빨간색 오류 출력 싶지 않아요. 흰색 텍스트는 내가 콘솔에 인쇄하고 싶은 것입니다. 내가'-ErrorAction SilentlyContinue'를 시도했음을 언급 했어야 만하지만, 문제가 있다면'$ move'는 null입니다. 실패가 있으면'$ move'를 검사하고 실패의 유형에 따라 논리를 실행할 수 있기를 원합니다. –

+0

샘플 출력을 보면,'2> $ null' 또는'2> err.txt'로 쉽게 리다이렉트 할 수있는 에러 스트림 출력이있는 것으로 보입니다. –

답변

2

당신은 예를 들어, 파워 쉘을 호출에서 해당 명령을 포장 할 수 있습니다 :

powershell -command { write-host "a" } | out-null 

또는

$out = powershell -command { write-host "a" } 

당신은 인쇄중인 a 볼 수 없습니다.

하지만

write-host "a" | out-null 

을 할 때 당신은이 a

+0

하지만 그는 출력을 얻을 것인가? –

+0

@Graimer - 업데이트 – manojlds

+0

힘든 시간을 보내고 있습니다. '$ test = powershell -command {write-host "a"; $ obj = New-Object psobject -Property @ {Testprop = "Testval"}; $ obj}'는'$ obj'를 반환하지 않습니다. 글쎄, acutally하지만, 또한 출력 모든 출력 호스트 그래서 당신은 개체를 찾기 위해 배열에 깊이 파고해야합니다. –

1

파일로 출력을 리디렉션 할 수 볼 수? 단지 PS V3 :

#Invalid command: 
ping -rrfrfr *> $env:temp\test.txt 
$? # last execution status will be false 

ping google.com *>> $env:temp\test.txt 
$? #true as command is valid 

$resu=gc $env:temp\test.txt 
$resu 
+0

'* >>'은 V3 전용입니다. '2>'는 모든 버전의 PowerShell에서 작동합니다. –

1

시도 :

$move = Move-VM -VM $vmToMigrate -VMHost $destinationHost 2> err.txt 

$move 정상 표준 출력 출력을 반환하고 오류가 파일에 넣어지게된다. 전혀 오류에 관심이 없다면 :

$move = Move-VM -VM $vmToMigrate -VMHost $destinationHost 2> $null 
+0

정말요? 나는이 일이 보이지 않는다. OP가 원하는대로이 작업이 가능합니까? '& {write-host "a"} 2> blah.txt'. 그것은 여전히 ​​인쇄? – manojlds

+0

OP의 문제에서'Write-Host'는 어디에 있습니까? Move-VM이 쓰기 호스트를 사용하고 있다고 말하지 마십시오. –

+0

'$ a = Move-VM ... '이 콘솔에 물건을 돌려 준다고 생각됩니다. – manojlds

1

내 스크립트에서 원하지 않는 출력을 어떻게 억제합니까? "... 1/17를"원하지 않는 및 "VM이 남아 ..."또는 당신이 원하는하지 않습니다

[void]Move-VM -VM $vmToMigrate -VMHost $destinationHost 
관련 문제