jeudi 14 juin 2018

VMware et Powershell : liste des alarmes déclenchées sur les hôtes physiques et VM

J'ai développé rapidement sur un coin de bureau un script pour lister les alarmes déclenchées sur les hôtes ESX et les machines virtuelles portées par ces hôtes, car à ma grande surprise, PowerCli ne possède pas de commande permettant de les obtenir directement. Il faut donc ruser un peu et utiliser les vues d'ensemble de machines virtuelles et physiques pour récupérer leur état et ensuite afficher les alarmes en lien. Ce script a été développé et testé avec PowerCli 6.5 ; à noter que depuis la version 6, ce ne sont plus des SnapIn mais des modules (source), il faudra donc adapter le début du script si jamais la version exécutée fonctionne avec des SnapIn.

Import-Module VMware.VimAutomation.Core
$ESXI = Read-Host "vSphere vCenter server to connect to"
Connect-VIServer $ESXI
Write-Host ""
Write-Host "Collecting virtual machines list..."
Write-Host ""
$VMArrayList = Get-VM
foreach ($VM in $VMArrayList)
    {
    $VMView = Get-View -ViewType VirtualMachine -Filter @{"Name" = "$VM"}
    if ($VMView.TriggeredAlarmState.Overallstatus -eq "red")
        {
        foreach ($VMAlarm in $VMView.TriggeredAlarmState)
            {
            $VMAlarmType = $VMView.TriggeredAlarmState.Alarm
            $VMAlarmTime = $VMView.TriggeredAlarmState.Time
            $VMAlarm = Get-AlarmDefinition -id $VMAlarmType
            Write-Host "Virtual Machine: $VM"
            Write-Host "Alarm: $VMAlarm"
            Write-Host "Time: $VMAlarmTime"
            Write-Host ""
            }
        }
    }
Write-Host "Done!"
Write-Host "Now collecting physical hosts list..."
Write-Host ""
$HostArrayList = Get-VMHost
foreach ($HostSys in $HostArrayList)
    {
    $HostView = Get-View -ViewType HostSystem -Filter @{"Name" = "$Host"}
    if ($HostView.TriggeredAlarmState.Overallstatus -eq "red")
        {
        foreach ($HostAlarm in $HostView.TriggeredAlarmState)
            {
            $HostAlarmType = $HostView.TriggeredAlarmState.Alarm
            $HostAlarmTime = $HostView.TriggeredAlarmState.Time
            $HostAlarm = Get-AlarmDefinition -id $HostAlarmType
            Write-Host "Host: $Hostsys"
            Write-Host "Alarm: $HostAlarm"
            Write-Host "Time: $HostAlarmTime"
            Write-Host ""
            }
        }
    }
Write-Host "Done!"


Le script commenté est téléchargeable sur le miroir de téléchargement 💾.

Aucun commentaire:

Enregistrer un commentaire