普段は、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.