| Works
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