You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell调用Zabbix API查询事件如何获取主机名而非主机ID

Zabbix API事件查询返回主机名解决方案

方案1:单次查询直接关联主机信息(推荐)

Zabbix 原生event.get接口支持通过selectHosts参数直接拉取事件绑定的主机数据,无需单独查询主机列表,修改事件查询的params配置即可:

# 先单独存储登录凭证,避免result变量复用导致的取值错误
$auth = ($result.Content | ConvertFrom-Json).result

# 查询事件列表 新增selectHosts参数
$params.body = @{
    "jsonrpc" = "2.0"
    "method" = "event.get"
    "params" = @{
        "output" = "extend"
        "selectHosts" = @("host", "hostid") # 新增该行,指定返回关联主机的名称和ID
        "time_from" = "1638226800"
        "time_till" = "1638313200"
        "sortfield" = @("clock", "eventid")
        "sortorder" = "DESC"
    }
    auth = $auth
    id = 1
} | ConvertTo-Json

# 获取事件查询结果,返回结果中会新增hosts字段包含对应主机名
$result = Invoke-WebRequest @params -UseBasicParsing
$eventWithHost = $result.Content | ConvertFrom-Json
$eventWithHost.result # 直接查看带主机名的事件数据

方案2:本地关联已有主机映射

如果你需要复用已查询到的主机列表,可通过哈希表做ID到名称的映射,批量关联事件数据,适合大量数据处理场景:

# 存储登录凭证
$auth = ($result.Content | ConvertFrom-Json).result

# 查询主机列表并生成ID-名称映射表
$params.body = @{
    "jsonrpc" = "2.0"
    "method"= "host.get"
    "params"= @{
        output = @( "host", "hostid", "status" )
        selectInterfaces = @( "interfaceid", "ip", "dns", "useip" )
        groupids = @( "40")
    }
    auth = $auth
    id = 2
} | ConvertTo-Json
$hostResult = Invoke-WebRequest @params -UseBasicParsing | ConvertFrom-Json
# 构建哈希映射表
$hostMap = @{}
foreach ($h in $hostResult.result) {
    $hostMap[$h.hostid] = $h.host
}

# 查询事件列表
$params.body = @{
    "jsonrpc" = "2.0"
    "method" = "event.get"
    "params" = @{
        "output" = "extend"
        "time_from" = "1638226800"
        "time_till" = "1638313200"
        "sortfield" = @("clock", "eventid")
        "sortorder" = "DESC"
    }
    auth = $auth
    id = 1
} | ConvertTo-Json
$eventResult = Invoke-WebRequest @params -UseBasicParsing | ConvertFrom-Json

# 关联主机名
$eventWithHost = foreach ($e in $eventResult.result) {
    # 新增host_name字段存储对应主机名
    $e | Add-Member -MemberType NoteProperty -Name "host_name" -Value $hostMap[$e.hostid] -Force
    $e
}

# 输出结果 可按需选择格式
$eventWithHost | Format-Table # 表格输出
$eventWithHost | ConvertTo-Json -Depth 10 # JSON输出

内容的提问来源于stack exchange,提问作者scribe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:24:02