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

如何用PowerShell向Zabbix API传递多个key_值?代码调试求助

问题:Zabbix API查询多个监控项返回空结果

按照文档要求,我用方括号包裹多个监控项键值,但PowerShell代码执行后返回空结果。尝试过多种写法,要么无结果要么报错。

我的PowerShell代码

$params = @{
    body = @{
        "jsonrpc"= "2.0"
        "method"= "item.get"
        "params"= @{
            "host"= $HostName
            "search"= @{
            "key_"= "[vm.memory.size[total],system.cpu.num]"
            }
            "searchByAny"= "true"
        }
            "id"= 50
            "auth"="e57c8231e4d8f0f1c8d3ea2209299e65864a8c394458f670a9bc35583c19e129"
        } | ConvertTo-Json
        uri = "$baseurl/api_jsonrpc.php"
        headers = @{"Content-Type" = "application/json"}
        method = "Post"
    }
$HostDetails = $($_.HostName)

$result = Invoke-WebRequest @params -useBasicParsing
$rawdata = $result | ConvertFrom-Json
#$rawdata.result

执行后返回结果

StatusCode        : 200
StatusDescription : OK
Content           : {"jsonrpc":"2.0","result":[],"id":50}
RawContent        : HTTP/1.1 200 OK
                    Access-Control-Allow-Origin: *
                    Access-Control-Allow-Headers: Content-Type
                    Access-Control-Allow-Methods: POST
                    Access-Control-Max-Age: 1000
                    Strict-Transport-Security: max-age=315360...
Forms             :
Headers           : {[Access-Control-Allow-Origin, *], [Access-Control-Allow-Headers, Content-Type], [Access-Control-Allow-Methods,
                    POST], [Access-Control-Max-Age, 1000]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        :
RawContentLength  : 37

解决方案

问题核心是**key_参数格式错误**,以及JSON序列化深度不足:

  1. 修正key_的数组格式:
    Zabbix API要求key_接收数组而非带方括号的字符串。把原代码中的:

    "search"= @{
        "key_"= "[vm.memory.size[total],system.cpu.num]"
    }
    

    改成:

    "search"= @{
        "key_"= @("vm.memory.size[total]", "system.cpu.num")
    }
    
  2. 添加JSON序列化深度参数:
    PowerShell的ConvertTo-Json默认只处理2层嵌套,请求结构层级更深,必须加上-Depth参数确保数组被正确序列化:

    } | ConvertTo-Json -Depth 10
    
  3. 规范布尔值参数:
    把"searchByAny"= "true"改成"searchByAny"= $true,用布尔类型而非字符串,更符合API参数要求。

修改后的完整body部分

body = @{
    "jsonrpc"= "2.0"
    "method"= "item.get"
    "params"= @{
        "host"= $HostName
        "search"= @{
            "key_"= @("vm.memory.size[total]", "system.cpu.num")
        }
        "searchByAny"= $true
    }
    "id"= 50
    "auth"="e57c8231e4d8f0f1c8d3ea2209299e65864a8c394458f670a9bc35583c19e129"
} | ConvertTo-Json -Depth 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:05:28