如何用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序列化深度不足:
修正
key_的数组格式:
Zabbix API要求key_接收数组而非带方括号的字符串。把原代码中的:"search"= @{ "key_"= "[vm.memory.size[total],system.cpu.num]" }改成:
"search"= @{ "key_"= @("vm.memory.size[total]", "system.cpu.num") }添加JSON序列化深度参数:
PowerShell的ConvertTo-Json默认只处理2层嵌套,请求结构层级更深,必须加上-Depth参数确保数组被正确序列化:} | ConvertTo-Json -Depth 10规范布尔值参数:
把"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
相关产品推荐
相关产品推荐

