| Works
PowerCLIでvMotion その3
わざわざ移行先のホストを指定するのが面倒なので、先日のこれのオプションを減らした。
用途は同じでホストを空けたいとき。
引数で移行先を指定する代わりに、移行元ホストと同じクラスタ内の他ホストが順番に選択される。ただし、クラスタを構成していない場合は範囲がデータセンターになるので注意が必要かも。
Param (
[Parameter(Mandatory = $True, HelpMessage="Source ESXi Host")][alias("src","s")][ValidateNotNullOrEmpty()][string]$SrcEsx
)
$VcSv = "192.168.0.251"
$VcUser = "administrator@vsphere.local"
$VcPass = "password"
Import-Module VMware.PowerCLI
#Add-PSSnapin VMware.VimAutomation.Core
Connect-VIServer -Server $VcSv -User $VcUser -Password $VcPass
$SrcHost = Get-VMHost -Name $SrcEsx
$GroupHosts = Get-VMHost -Location $SrcHost.Parent
$TargetHosts = @()
Foreach ($DestEsx in $GroupHosts) {
if ($DestEsx.Name -ne $SrcEsx) {
$TargetHosts += Get-VMHost -Name $DestEsx
}
}
$Cnt = 0
$PowerOnVms = Get-VM | Where-Object { $_.PowerState -eq "PoweredOn" }
Foreach ($TargetVm in $PowerOnVms) {
if ($TargetVm.VMHost.Name -eq $SrcEsx) {
try {
Move-VM -VM $TargetVm -Destination $TargetHosts[$Cnt] -RunAsync:$True
} catch {
Write-Error $_.Exception
exit 1
}
$Cnt++
if ($Cnt -ge $TargetHosts.Length) {
$Cnt = 0
}
Start-Sleep 10
}
}
Disconnect-VIServer -Server $VcSv -Confirm:$False
移行先の指定が不要なので、実行時の引数は"-s <移行元のESXiホスト>"だけですね。
いくつかバリエーションを作ってみたけど、これくらいあれば大抵は困らないでしょうかね?
もちろん特定の環境に特化させて作るのもありだけど。