我正在尝试使用 zabbix api 通过它们的名称获取一些主机的主机 ID。我使用这个例子作为我的起点。
http://wiki.webperfect.ch/index.php?title=Zabbix_API__-_Create_Maintenance_Window
这是来自zabbix api页面的示例(不在powershell中),我可以使用邮递员让它正常工作,所以我假设问题是我的powershell而不是他们的api。
https://www.zabbix.com/documentation/2.4/manual/api/reference/host/get
这是我的功能。
function Get-HostIDs {
param(
[string]$token,
[string[]]$hostNames
)
$params = @{
body = @{
"jsonrpc"= "2.0"
"method"= "host.get"
"params"= @{
"filter"= @{
"host"= $hostNames
}
}
"id"= 1
"auth"= $token
} | ConvertTo-Json
uri = "$baseurl/api_jsonrpc.php"
headers = @{"Content-Type" = "application/json"}
method = "Post"
}
$results = Invoke-WebRequest @params
return $($results.Content | ConvertFrom-Json).result
}
如果我像这样只用 1 个主机名调用该函数。
Get-HostIDs -token $authToken -hostNames @('host1')
它按预期工作。但是,当我像这样添加第二个主机时,它不起作用。
Get-HostIDs -token $authToken -hostNames @('host1', 'host2')
当我执行一些调试写入主机语句时,它似乎以单个字符串“host1 host2”而不是数组的形式出现。
我觉得我错过了一些非常简单的东西,但是已经为此苦苦挣扎了几个小时。起初我认为他们的 API 没有正确记录,你只能发送 1 个主机,但后来我在 post man 中尝试了他们的文档示例,它工作正常。感谢您的任何帮助。非常感激。