1

我正在尝试使用 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 中尝试了他们的文档示例,它工作正常。感谢您的任何帮助。非常感激。

4

0 回答 0