vSphere リソースプール内のVMにPingをとばして生存確認




#vSphereのリスト上で "PoweredON" となっていてもVMの "OS" が生きているかどうか、個別に確認したい

#vSphereに接続
Connect-VIServer -Server vcsa.vsphere.local -Protocol https -User '[email protected]' -Password 'Password'

#リソースプール、VM、GuestOSの情報を収集
$respool   = Get-ResourcePool satatest
$vmlist    = Get-VM -Location $respool
$guestlist = Get-VMGuest $vmlist

#数が一致するか確認
$vmlist.count
$guestlist.count

#ipのリストを作ってみる
#と同時に、For文でPingを飛ばしてみる
$iplist    = @()
for ($i=0; $i -lt $guestlist.count ; $i++){
  if( $vmlist[$i].PowerState -eq "PoweredOn" ){
    $iplist += $guestlist[$i].IPAddress[0]
    echo $vmlist[$i].Name
    ping $iplist[$i]
  }else{
    $iplist += "noip"
    echo $vmlist[$i].Name " notRunning"
  }
}

#後記
$vmlist.PowetState の値 PoweredOn と
$guestlist.State   の値 Running は情報が一致するので同等とみて良さそう
従って、どちらかの情報をとってIPをゲットするのがよい
しかし、そも.そも$guestlist の中でOSが生きている、つまりRunningの時でないとIPは表示されない
従って、$guestlist.IPAddress の値が入っているか、NULLかで判断してもよいかもしれない。

IPの情報は、vSphereのリソースプールからVMリストを右に表示してExportでIPの項目を選ぶことでゲットできる

Pingの内容をすべて確認するのは厳しいので、上記ExportのPoweredONの数とPingの成功の数を比較し、同一であればPowerdONのVMはPingレスポンスがあると考えてよい。



#PoweredOnのみをカウント
$PoweredOn=0
for ($i=0; $i -lt $guestlist.count ; $i++){
  if( $vmlist[$i].PowerState -eq "PoweredOn" ){
    $poweredOn++
  }
}
echo $PoweredOn