URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

PowerCLIでvMotion その2

 先日のこれをもうちょっと汎用的に使えるように修正。
 主にメンテナンスでホストを空けたいときとかに使う想定。前みたいに1対1だと使う機会が限られるので。

 ほぼ前のと同じですが、引数の移行先ESXiホストをカンマ区切りで複数指定できるようにして、そのホストにラウンドロビンで仮想マシンを移行していきます。

Param ( [Parameter(Mandatory = $True, HelpMessage="Source ESXi Host")][alias("src","s")][ValidateNotNullOrEmpty()][string]$SrcEsx, [Parameter(Mandatory = $True, HelpMessage="Destination ESXi Hosts")][alias("dest","d")][ValidateNotNullOrEmpty()][array]$DestEsxs ) $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 $TargetHosts = @() Foreach ($DestEsx in $DestEsxs) { $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ホスト> -d <移行先のESXiホスト1>,<移行先のESXiホスト2>,<移行先のESXiホスト3>"といった感じです。

 なんか引数でホストを指定するのも面倒になってきた今日この頃でしたw