2

我正在尝试使用带有 powershell 的 Zabbix API 来自动化一些监控内容。我想根据传递给我的函数的不同参数检索“项目”以执行类似的操作:如果传递了 -itemDescription 参数,则查找此描述和/或参数 -host 是否传递给该主机的限制范围等。 ..你可以在这里找到方法描述:https ://www.zabbix.com/documentation/1.8/api/item/get

这是一个正确的要求:

{
"jsonrpc":"2.0",
"method":"item.get",
"params":{
    "output":"shorten",
    "search": {"description": "apache"},
    "limit": 10
},
"auth":"6f38cddc44cfbb6c1bd186f9a220b5a0",
"id":2
}

所以,我知道如何添加几个“参数”,我是为 host.create 方法做的,像这样:

$proxy = @{"proxyid" = "$proxyID"}
$templates = @{"templateid" = "$templateID"}
$groups = @{"groupid" = "$hostGroupID"}
...
Add-Member -PassThru NoteProperty params @    {host=“$hostName”;dns="$hostFQDN";groups=$groups;templates=$templates;proxy_hostid=$proxyID} |
...

然而,我不知道如何使它有条件。我找不到在该行中间添加“if”语句的正确语法。就像是 :

Add-Member -PassThru NoteProperty params @{output="extend";if(itemDescription) {search=$desctiption} } )

非常感谢你们!

另外,请原谅我的英语,这不是我的第一语言

4

1 回答 1

1

像 Kayasax 一样,我在将“参数”传递给 add-member 之前创建了它。仅供参考,这是我的工作代码:

#construct the params
$params=@{}
$search=@{}
#construct the "search" param
if ($itemDescription -ne $null) {

    $search.add("description", $itemDescription)
    $params.add("search",$search)
} 
#contruct the "host" param
if ($hostName -ne $null) {$params.add("host", $hostname) } 
#finish the params
$params.add("output", "extend")
#construct the JSON object  
$objitem = (New-Object PSObject | Add-Member -PassThru NoteProperty jsonrpc '2.0' |
Add-Member -PassThru NoteProperty method 'item.get' |
Add-Member -PassThru NoteProperty params $params |
Add-Member -PassThru NoteProperty auth $session.result |
Add-Member -PassThru NoteProperty id '2') | ConvertTo-Json
于 2013-07-18T12:49:53.423 回答