2015年6月15日月曜日

PowerCLIで、仮想マシンとホストの電源断を自動化する

検証環境を起動するときは、そこまで手間では無いのですが、シャットダウンの際には、vCenter Serverが一番最後にシャットダウンされるように1つずつ仮想マシンをシャットダウンしたり、仮想マシンでvCenter Serverを構築している関係で、ホスト(ESXi)の電源断は、わざわざvSphere Clientを起動して、シャットダウンをしなければならない。

これは、前々から面倒だなと思っていたので、PowerCLIを利用為て仮想マシンとESXiホストをシャットダウンするスクリプトを作成しました。

尚、PowerCLI6系での動作を確認しております。
というのも、今まであった「Shutdown-VMGuest」コマンドレットがなくなり、「Stop-VMGuest」に変わっていたりするためです。

参考:
VMware vSphere PowerCLI 6.0 Release 1 Release Notes
https://www.vmware.com/support/developer/PowerCLI/PowerCLI60R1/powercli60r1-releasenotes.html

ログイン先もvCenter Serverではなく、ESXiにすることで、ゲストのシャットダウンとホストのシャットダウンまでを一括でできます。
UPSのスクリプトの1部として利用頂いてもよいかと思います。

#
# ゲストとホストの一括シャットダウン
#
Add-PSSnapin VMware.VimAutomation.Core

#ESXiホストのIP
$ESXiHostIP = X.X.X.X
$msg = "現在シャットダウン待機中です"

try
{
    #ESXiホストのログイン情報を入れる
    $vi = Connect-VIServer -Server $ESXiHostIP -User ユーザー名 -Password パスワード

    #電源ON仮想マシンを一気いっきにシャットダウン
    $vms = Get-VM | Where-Object { $_.Name -ne $vCenterVMName -and $_.PowerState -eq 'PoweredOn' } | Stop-VMGuest -Confirm:$false

    #電源ON仮想マシン一覧を表示
    Get-VM | Where-Object { $_.Name -ne $vCenterVMName -and $_.PowerState -eq 'PoweredOn' } 

    #すべての仮想マシンの電源が落ちるまで待つ
    do
    {
        Start-Sleep 10
        $vms = Get-VM | Where-Object { $_.Name -ne $vCenterVMName -and $_.PowerState -eq 'PoweredOn' }
        Get-VM | Where-Object { $_.Name -ne $vCenterVMName -and $_.PowerState -eq 'PoweredOn' }
        $msg
    }
    while($vms.Length -gt 1)

    #ESXiホストをシャットダウンする
    Stop-VMHost $ESXiHostIP -Force:$true  -Confirm:$false
}
catch
{
    $vi
}

#ESXiからシャットダウン
disConnect-VIServer
シャットダウンの順番が必要な仮想マシンはこのスクリプトを流す前に、上部で順番に仮想マシンをシャットダウンするような手順を書くとよいかと思います。 きっと、法廷電源設備点検の前には必要なスクリプトでは...。

0 件のコメント:

コメントを投稿