URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

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ホスト>"だけですね。

 いくつかバリエーションを作ってみたけど、これくらいあれば大抵は困らないでしょうかね?
 もちろん特定の環境に特化させて作るのもありだけど。