PowerShellスクリプトを使い、vCenter配下の仮想マシンをスクリプトからシャットダウンします。
メンテナンス作業などで一斉に仮想マシンをシャットダウンする用途を想定していますので、シャットダウン対象外としたい仮想マシンを指定できるようにしてます。
また、最初からパワーオフ状態だった仮想マシンはテキストファイルに書き出すようにしています。
param (
# vCenter Server IPアドレス
$VCenter = "myserver",
# vCenter Server ログインユーザ
$User = "domain\username",
# vCenter Server ログインパスワード
$Pass = "password"
);
# シャットダウン対象外とするVM
$exclusionVMs = @("myvm1","myvm2")
# シャットダウン間隔を秒単位で指定
$sleepTime = 4
# パワーオフ状態のVMを記録するファイル
$PoweroffVMslist = "c:\poweroffvms.txt"
# 初期化処理
#-------------------------------------------------------------------------
function Do-Initialize()
#-------------------------------------------------------------------------
{
if ( (Get-PSSnapin | Where-Object { $_.Name -eq "VMware.VimAutomation.Core"}) -eq $null )
{
Add-PSSnapin VMware.VimAutomation.Core
}
}
#-------------------------------------------------------------------------
# Main Application Logic
#-------------------------------------------------------------------------
Do-Initialize
# vCenterへ接続
$Server = Connect-VIServer -Server $VCenter -User $User -Password $Pass
foreach ($getVM in Get-VM){
if($getVM.PowerState -eq "PoweredOff"){
$isPoweredOff = $true
$getVM.Name | Out-File $PoweroffVMslist -Append
}
else {
$isPoweredOff = $false
}
# 除外対象のVMかどうかを判定してフラグをセットする
$isExclusionVm = $false
foreach ($ex in $exclusionVMs){
if($ex -eq $getVM.Name){
$isExclusionVm = $true
break
}
}
# シャットダウン対象外のVMと最初からパワーオフ状態だったVMを除き、シャットダウンする
if((-not $isExclusionVm) -and (-not $isPoweredOff)){
Write-Host $getVM.Name
Shutdown-VMGuest -VM $getVM -Confirm:$false
Start-Sleep -s $sleepTime
}
}
# vCenterから切断
Disconnect-VIServer -Server $Server -Confirm:$false