如何使用 PowerCLI 获取触发警报?

如何使用 PowerCLI 获取触发警报?

在 VM 主机上的 vSphere Client 中,在“警报”选项卡中可以查看“已触发警报”。

如何使用 PowerCLI 获取这些警报?

答案1

为了找到所有警报状态为“红色”的 vmhost,我对此进行了扩展。

#
# Find all hosts with triggered alarms in "Red" state
#
$esx_all = Get-VMHost | Get-View
$Report=@()
foreach ($esx in $esx_all){
    foreach($triggered in $esx.TriggeredAlarmState){
        If ($triggered.OverallStatus -like "red" ){
            $lineitem={} | Select Name, AlarmInfo
            $alarmDef = Get-View -Id $triggered.Alarm
            $lineitem.Name = $esx.Name
            $lineitem.AlarmInfo = $alarmDef.Info.Name
            $Report+=$lineitem
        } 
    }
}
$Report |Sort Name | export-csv "c:\temp\ESX-Host-Red-Alarms.csv" -notypeinformation -useculture
Invoke-item "c:\temp\ESX-Host-Red-Alarms.csv"

答案2

这就是我所用的。

$esx = Get-VMHost $vmhost | Get-View
foreach($triggered in $esx.TriggeredAlarmState){
  $alarmDef = Get-View -Id $triggered.Alarm
  Write-Host $alarmDef.Info.Name
}

答案3

稍微扩展一下约翰申64的 PowerCLI回答,我找到了 Luc Dekens 的邮政在 community.vmware.com 上非常有帮助的:

foreach($dc in (Get-Datacenter | where {$_.ExtensionData.triggeredAlarmState})){
    $dc.ExtensionData.triggeredAlarmState |
    Select @{N="Entity";E={Get-View $_.Entity | Select -ExpandProperty Name}},
        @{N="Alarm";E={Get-View $_.Alarm | Select -ExpandProperty Info | Select -ExpandProperty Name}},Time,OverallStatus,
        @{N='vCenter';E={$dc.Uid.Split('@:')[1]}}
}

...我最终使用了它的一个变体:

foreach ($toplevel in    @(Get-VDSwitch    | Where-Object { $_.ExtensionData.TriggeredAlarmState.count -gt 0 }) +
                         @(Get-Datacenter  | Where-Object { $_.ExtensionData.TriggeredAlarmState.count -gt 0 })) {
    foreach ($alarm in $toplevel.ExtensionData.TriggeredAlarmState) {
        $localt = [System.TimeZoneInfo]::ConvertTime($alarm.time, [System.TimeZoneInfo]::Local)
        $entity = Get-View $alarm.Entity
        $alarmview = Get-View $alarm.Alarm
        Write-Output ("Alarm: At top-level entity $($toplevel.Name), $($entity.Name) went " +
                        "$($alarm.OverallStatus) at $($localt) for $($alarmview.Info.Name)")
    }
}

这个想法是循环遍历警报可以汇总到的每个顶级实体。我通过反复试验发现了这一点,Get-VDSwitchGet-Datacenter满足了我的需要。另一个棘手的部分是意识到警报内的实体和警报对象是参考到实际的对象,因此要获取有关实际项目的详细信息,您必须使用 取消引用它Get-View

相关内容