2017-01-13 18 views
1

특정 접두어와 일치하는 모든 VM의 전원을 끄고 삭제할 스크립트가 있습니다. 다른 자동화 도구를 테스트 할 때이 도구를 사용하여 실험실을 쉽게 재설정 할 수 있습니다. 이 스크립트는 미리 정의 된 여러 vCenter 서버에 연결 한 다음 모든 VM 목록을 가져옵니다. 내가 가지고있는 문제는 VM의 전원을 끄거나 삭제하려고 할 때 "VMMAME 이름이 'VMNAME'인 VirtualMachine을 찾을 수 없다는 것입니다." 두하여 vCenter 서버에서 가상 머신의 목록을 가져옵니다PowerCLI : 여러 vCenter 서버에서 VM 작업

$vcservers = @("VC1","VC2") 
Connect-VIServer $vcservers 

코드 :

$prefix = "TEST" 
ForEach ($vc in $vcservers) { 
    $vms += Get-VM -Server $vc | where {$_.Name -like "$prefix*"} 
} 

코드 각 VM을 삭제 전원을 끈 다음하여 vCenter 서버에 연결

코드

ForEach ($vm in $vms) { 
    $vmname = $vm.name 
    if ($vm.PowerState -eq "PoweredOn") { 
     Stop-VM -VM $vmname -confirm:$false 
     Remove-VM -VM $vmname -DeletePermanently -confirm:$false 
    } 
} 

Set-PowerCLIConfigu를 사용하여 Users 및 AllUsers 범위에 "Multiple"속성을 설정했습니다 따라서 모든 vCenter 서버를 검색해야하지만 어떤 이유로 작동하지 않습니다.

EDIT 1/25/17 $ vcservers 변수를 일관되게 만들기위한 코드가 업데이트되었습니다.

+0

'$ vms'에는 무엇이 포함되어 있습니까? 나는 당신이 VM의 배열을 기대하는 동안 그것은 배열의 배열이라고 가정합니다. – Swonkie

+0

두 번째 코드 블록의 검색과 일치하는 가상 컴퓨터 목록이 포함되어 있습니다. 그것은 이름, powerstate 및 기타 속성을 포함하는 배열입니다. – McKenning

답변

1

변수 이름과 관련된 첫 번째 문제가 해결 된 이래로 현재 PowerCLI에서 어떤 VM을 삭제할 VMenter가 확실하지 않은 것으로 의심됩니다. 따라서 한 번에 모든 vCenter에 대해 실행하는 대신 vCenter에서 VCenter로 이동할 수 있습니다.

$prefix = "TEST" 
$vcservers = @("VC1","VC2") 
ForEach ($vc in $vcservers) { 
    Connect-VIServer $vc 
    $vms += Get-VM -Server $vc | where {$_.Name -like "$prefix*"} 

    ForEach ($vm in $vms) { 
     $vmname = $vm.name 
     if ($vm.PowerState -eq "PoweredOn") { 
      Stop-VM -VM $vmname -confirm:$false 
      Remove-VM -VM $vmname -DeletePermanently -confirm:$false 
     } 
    Disconnect-VIServer $vc 
} 
+0

좋은 소식이지만 원래 번역본에서 오류가 발생했습니다. 변수가 동일하도록 질문을 업데이트했습니다. – McKenning

+1

테스트 할 vcenter가 없지만 Stop-VM 및 Remove-VM을 실행할 때보고있는 VCenter를 알지 못하기 때문에 문제가 다시 발생한다고 생각합니다. 할 수있는 일은 Connect-VIServer를 포함한 모든 것을 동일한 ForEach 루프 안에 포함하는 것입니다. 그걸 시험해보고 어떻게되는지 알려줘. 작동하는 경우 별도의 답변으로 추가하겠습니다. – twglomski

+0

동일한 ForEach 루프에 모든 것을 포함시키는 방법을 확신 할 수 없습니다. foreach 루프 안에있을 때까지 vCenters에 연결하지 않을 때 어떻게 vms에서 루프를 수행 할 수 있습니까? – McKenning