다음은 내가 수행하려고 시도한 것입니다. vSphere 설치에 여러 클러스터가 있고 그 클러스터 아래에 몇 개의 호스트가 있습니다.PowerCLI가 클러스터와 호스트를 통과합니다.
클러스터를 통과하고 각 클러스터 내부를 돌아 다니며 호스트를 유지 관리 모드로 전환하고 클러스터 외부로 이동하고 VM을 시작/중지하고 메모리를 추가 한 다음 호스트를 다시 이동시키는 스크립트를 작성하려고합니다. 클러스터 안으로 이동되었습니다.
여기까지 제가 지금까지 있습니다. 내부 루프는 작동하지만 바깥 쪽 루프는 모든 것을 두 번 실행하고 내부 루프에 $cluster
이라는 클러스터 이름을 추가하는 것입니다.
아이디어가 있으십니까? 각 루프의 모든 호스트에 대해 내부 루프를 실행하기 만하면됩니다.
테스트 용으로 -WhatIf
을 추가 했으므로 무시해도됩니다.
Connect-VIServer vcenter01
$clusters = Get-Cluster
$esxhosts = Get-Cluster $clusters | Get-VMHost
$Datacenter = "Datacenter01"
$sleep = 1
& {
foreach ($cluster in $clusters) {
foreach ($esxhost in $esxhosts) {
Set-VMHost $esxhost -State Maintenance -WhatIf
Move-VMhost $esxhost -Destination $Datacenter -WhatIf
Set-VMHost $esxhost -State Connected -WhatIf
Sleep $sleep
Stop-VMGuest -Vm Z-VRA-$esxhost -Confirm:$false -WhatIf
Sleep $sleep
Set-VM -Vm Z-VRA-$esxhost -MemoryGB 6 -Confirm:$false -WhatIf
Start-VM -Vm Z-VRA-$esxhost -WhatIf
Sleep $sleep
Move-VMhost $esxhost -Destination $cluster -WhatIf
}
}
}
Disconnect-VIServer vcenter01
여기에 작업 복사본이 (감사 @Ansgar Wiechers) 모습입니다 :
내가 시작/그것을 통해 작동 각 클러스터에서 HA 수락 제어를 중지하는 몇 가지 코드를 추가했다. resorces가 부족한 경우 유지 관리 모드에서 VM이 비워있는 문제가 중지됩니다.
Connect-VIServer vcenter01
$Datacenter = "Datacenter01"
$sleep = 1
Get-Cluster | ForEach-Object {
$cluster = $_
Set-Cluster -HAAdmissionControlEnabled $false -Cluster $cluster -Confirm:$false -Whatif
$cluster | Get-VMHost | ForEach-Object {
Set-VMHost $_ -State Maintenance -WhatIf
Move-VMhost $_ -Destination $Datacenter -WhatIf
Set-VMHost $_ -State Connected -WhatIf
Sleep $sleep
Stop-VMGuest -Vm Z-VRA-$_ -Confirm:$false -WhatIf
Sleep $sleep
Set-VM -Vm Z-VRA-$_ -MemoryGB 6 -Confirm:$false -WhatIf
Start-VM -Vm Z-VRA-$_ -WhatIf
Sleep $sleep
Move-VMhost $_ -Destination $cluster -WhatIf
}
Set-Cluster -HAAdmissionControlEnabled $true -Cluster $cluster Confirm:$false -Whatif
}
Disconnect-VIServer vcenter01
도움을 주셔서 감사합니다. 내가 잘못한 것을 이해합니다. 네가 나에게 준 것을 시험해 보겠다. – Nov2009