普段は、vSphere4をvCenterで管理していますが、

クローンを作ったりする作業を自動化できないかと考えていたところ

PowerCLIなるものがあることがわかりました。


PowerCLIは、WindowsPowerShell上で動作します。

ESXに直接命令もできますし、vCenterあてに命令することもできます。


まずは、仮想OSの再起動をVIClientを使わずにできないかと模索していました。


さて、そのやりかたですが、

WindowsPowerShellをインストールした後

VMware vSphere PowerCLIをインストール。


VMware vSphere PowerCLIを起動。


「スクリプトの実行がシステムで無効になっているため…を読み込みません。」
などのエラーが出るので以下のコマンドを実行。


 Set-ExecutionPolicy Remotesigned

もう一度、VMware vSphere PowerCLIを起動すると、きれいに起動します。


さて、目的の再起動ですが、

再起動用の以下のスクリプトをRestart.sp1として保存します。


-----------------------------------------------------------

#vCenterのIP,ID,Password
$VCIP = '192.168.1.1'
$ID = 'root'
$PW = '****'


#引数が無ければExit
if( $args.Length -eq 0){exit}


$VMName = $args[0]
echo ('仮想端末名:' + $VMName)


#ログイン
Connect-VIServer $VCIP -Protocol https -User $ID -Password $PW


#ゲストのシャットダウン
Get-VM $VMName | Where-Object {$_.PowerState -eq 'PoweredOn'} | foreach { Shutdown-VMGuest -VM $_ -Confirm:$False; if ($? -eq $False ) { Stop-VM -VM $_ -Confirm:$False } }


#電源が落ちるまでSleep
$intCount = 0
do
{
Start-Sleep -s 5
$intCount ++

#1分待っても落ちないときはBreak
if ( $intCount -gt 12){break}

}while(Get-VM $VMName | Where-Object {$_.PowerState -eq 'PoweredOn'})


#強制終了
Get-VM $VMName | Where-Object {$_.PowerState -eq 'PoweredOn'} | foreach { Stop-VM -VM $_ -Confirm:$False }


#電源が落ちるまでSleep
do
{
Start-Sleep -s 1
}while(Get-VM $VMName | Where-Object {$_.PowerState -eq 'PoweredOn'})


#起動
Start-VM $VMName

exit


-----------------------------------------------------


ファイル名を指定して実行から、以下のパラメータで実行。

最後が仮想OS名。


C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -psc "C:\Program Files\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -c D:\source\VMCLI\Restart.ps1 仮想OS名


再起動できればOK.