628 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
		
		
			
		
	
	
			628 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
|  | <# 
 | |||
|  |  .Synopsis | |||
|  |   Open a session to the zabbix server | |||
|  | 
 | |||
|  |  .Description | |||
|  |   Open a session to the zabbix server | |||
|  | 
 | |||
|  |  .Parameter PSCredential | |||
|  |   Credential to connect to zabbix server | |||
|  | 
 | |||
|  |  .Parameter IPAdress | |||
|  |   Accept IP adress and domain name | |||
|  | 
 | |||
|  |  .Parameter UseSSL | |||
|  |   Switch to use https, leave empty to use http | |||
|  | 
 | |||
|  |  .Example | |||
|  |    Connect-Zabbix -User admin -Password zabbix -IPAdress 10.0.0.1 | |||
|  |    Connect to Zabbix server by IP adresse | |||
|  | 
 | |||
|  |  .Example | |||
|  |    Connect-Zabbix -User admin -Password zabbix -IPAdress zabbix.domain.lan -UseSSL | |||
|  |    Connect to Zabbix server by domain name with SSL | |||
|  | #> | |||
|  | Function Connect-Zabbix { | |||
|  |     Param ( | |||
|  |         [Parameter(Mandatory=$True)] | |||
|  |         [PSCredential]$PSCredential | |||
|  |         , | |||
|  |         [Parameter(Mandatory=$True)] | |||
|  |         [string]$IPAdress | |||
|  |         , | |||
|  |         [Switch]$UseSSL | |||
|  |     ) | |||
|  |     $Body = @{ | |||
|  | 	    jsonrpc = "2.0" | |||
|  | 	    method = "user.login" | |||
|  | 	    params = @{ | |||
|  | 		    user = $PSCredential.UserName | |||
|  | 		    password = $PSCredential.GetNetworkCredential().Password | |||
|  | 	    } | |||
|  | 	    id = 1 | |||
|  | 	    auth = $null | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body | |||
|  | 
 | |||
|  |     Switch ($UseSSL.IsPresent) { | |||
|  |         $False {$Protocol = "http"} | |||
|  |         $True {$Protocol = "https"} | |||
|  |     } | |||
|  |     $URL = $Protocol+"://$IPAdress/zabbix" | |||
|  |     $Res = Invoke-RestMethod ("$URL/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  | 
 | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Connection successful | |||
|  |         $Global:ZabbixSession = $Res | Select-Object jsonrpc,@{Name="Session";Expression={$_.Result}},id,@{Name="URL";Expression={$URL}} | |||
|  |         Write-Host ("Successfuly connected to " + $URL) | |||
|  |     } | |||
|  |     else { | |||
|  |         #Connection error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | <# 
 | |||
|  |  .Synopsis | |||
|  |   Get all host monitored from zabbix server | |||
|  | 
 | |||
|  |  .Description | |||
|  |   Get all host monitored from zabbix server | |||
|  | 
 | |||
|  |  .Parameter HostName | |||
|  |   To filter by name of the host | |||
|  | 
 | |||
|  |  .Parameter HostID | |||
|  |   To filter by id of the host | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get all hosts managed by zabbix server | |||
|  |    Get-ZabbixHost | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get info about Server1 host | |||
|  |    Get-ZabbixHost -HostName Server1 | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get info about 10123 ID | |||
|  |    Get-ZabbixHost -HostID 10123 | |||
|  | #> | |||
|  | Function Get-ZabbixHost { | |||
|  |     Param ( | |||
|  |         $HostName | |||
|  |         , | |||
|  |         $HostID | |||
|  |     ) | |||
|  |     $Body = @{ | |||
|  | 	    jsonrpc = $ZabbixSession.jsonrpc | |||
|  | 	    method = "host.get" | |||
|  | 	    params = @{ | |||
|  | 		    output = "extend" | |||
|  |             selectGroups = @( | |||
|  |                 "groupid", | |||
|  |                 "name" | |||
|  |             ) | |||
|  |             selectParentTemplates = @( | |||
|  |                 "templateid", | |||
|  |                 "name" | |||
|  |             ) | |||
|  | 		    filter = @{ | |||
|  | 			    host = $HostName | |||
|  | 		    } | |||
|  |             hostids = $HostID | |||
|  | 	    } | |||
|  | 	    id = $ZabbixSession.id | |||
|  | 	    auth = $ZabbixSession.Session | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body | |||
|  |     $Res =  Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  | 
 | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Command successful | |||
|  |         $Res.result | |||
|  |     } | |||
|  |     else { | |||
|  |         #Command error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | <# 
 | |||
|  |  .Synopsis | |||
|  |   Get all templates from zabbix server | |||
|  | 
 | |||
|  |  .Description | |||
|  |   Get all templates from zabbix server | |||
|  | 
 | |||
|  |  .Parameter TemplateName | |||
|  |   To filter by name of the template | |||
|  | 
 | |||
|  |  .Parameter TemplateID | |||
|  |   To filter by id of the template | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get all templates from zabbix server | |||
|  |    $Session | Get-ZabbixTemplate | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get info about Template1 | |||
|  |    Get-ZabbixTemplate -TemplateName Template1 | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get info about 10001 ID | |||
|  |    Get-ZabbixTemplate -TemplateID 10001 | |||
|  | #> | |||
|  | Function Get-ZabbixTemplate { | |||
|  |     Param ( | |||
|  |         $TemplateName | |||
|  |         , | |||
|  |         $TemplateID | |||
|  |     ) | |||
|  |     $Body = @{ | |||
|  | 	    jsonrpc = $ZabbixSession.jsonrpc | |||
|  | 	    method = "template.get" | |||
|  | 	    params = @{ | |||
|  | 		    output = "extend" | |||
|  | 		    selectHosts = "extend" | |||
|  | 		    filter = @{ | |||
|  | 			    host = $TemplateName | |||
|  | 		    } | |||
|  |             templateids = $TemplateID | |||
|  | 	    } | |||
|  | 	    id = $ZabbixSession.id | |||
|  | 	    auth = $ZabbixSession.Session | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body | |||
|  |     $Res =  Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  | 
 | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Command successful | |||
|  |         $Res.result | Select-Object Name,TemplateID,@{Name="HostsMembers";Expression={$_.hosts.hostid}} | |||
|  |     } | |||
|  |     else { | |||
|  |         #Command error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | <# 
 | |||
|  |  .Synopsis | |||
|  |   Get all groups from zabbix server | |||
|  | 
 | |||
|  |  .Description | |||
|  |   Get all groups from zabbix server | |||
|  | 
 | |||
|  |  .Parameter GroupName | |||
|  |   To filter by name of the group
 | |||
|  | 
 | |||
|  |  .Parameter GroupID | |||
|  |   To filter by id of the group
 | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get all groups from zabbix server | |||
|  |    $Session | Get-ZabbixGroup | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get info about Group1 | |||
|  |    Get-ZabbixGroup -GroupName Group1 | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get info about 10001 ID | |||
|  |    Get-ZabbixGroup -GroupID 10001 | |||
|  | #> | |||
|  | Function Get-ZabbixGroup { | |||
|  |     Param ( | |||
|  |         $GroupName | |||
|  |         , | |||
|  |         $GroupID | |||
|  |     ) | |||
|  |     $Body = @{ | |||
|  | 	    jsonrpc = $ZabbixSession.jsonrpc | |||
|  | 	    method = "hostgroup.get" | |||
|  | 	    params = @{ | |||
|  | 		    output = "extend" | |||
|  |             selectHosts = @( | |||
|  |                 "hostid", | |||
|  |                 "host" | |||
|  |             ) | |||
|  | 		    filter = @{ | |||
|  | 			    name = $GroupName | |||
|  | 		    } | |||
|  |         groupids = $GroupID | |||
|  | 	    } | |||
|  | 	    id = $ZabbixSession.id | |||
|  | 	    auth = $ZabbixSession.Session | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body | |||
|  | 	$Res =  Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  | 
 | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Command successful | |||
|  |         $Res.result | |||
|  |     } | |||
|  |     else { | |||
|  |         #Command error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | <# 
 | |||
|  |  .Synopsis | |||
|  |   Create new host to monitor from zabbix server | |||
|  | 
 | |||
|  |  .Description | |||
|  |   Create new host to monitor from zabbix server | |||
|  | 
 | |||
|  |  .Parameter HostName | |||
|  |   HostName of the host as it will display on zabbix | |||
|  | 
 | |||
|  |  .Parameter IP | |||
|  |   IP adress to supervise the host | |||
|  | 
 | |||
|  |  .Parameter DNSName | |||
|  |   Domain name to supervise the host | |||
|  | 
 | |||
|  |  .Parameter Port | |||
|  |   Port to supervise the host | |||
|  | 
 | |||
|  |  .Parameter GroupID | |||
|  |   ID of the group where add the host | |||
|  | 
 | |||
|  |  .Parameter TemplateID | |||
|  |   ID of the template where add the host | |||
|  | 
 | |||
|  |  .Parameter MonitorByDNSName | |||
|  |   If used, domain name of the host will used to contact it | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get all groups from zabbix server | |||
|  |    New-ZabbixHost -HostName Host1 -IP 10.0.0.1 -GroupID 8 -TemplateID 10001 | |||
|  | #> | |||
|  | Function New-ZabbixHost { | |||
|  |     Param ( | |||
|  |         [Parameter(Mandatory=$True)] | |||
|  |         [string]$HostName | |||
|  |         , | |||
|  |         [string]$InterfaceType = 1 | |||
|  |         , | |||
|  |         [string]$InterfaceMain = 1 | |||
|  |         , | |||
|  |         [string]$IP | |||
|  |         , | |||
|  |         [string]$DNSName | |||
|  |         , | |||
|  |         [string]$Port = 10050 | |||
|  |         , | |||
|  |         [Parameter(Mandatory=$True)] | |||
|  |         [string]$GroupID | |||
|  |         , | |||
|  |         $TemplateID | |||
|  |         , | |||
|  |         [Switch]$MonitorByDNSName | |||
|  |     ) | |||
|  | 
 | |||
|  |     Switch ($MonitorByDNSName.IsPresent) { | |||
|  |         $False {$ByDNSName = 1} # = ByIP | |||
|  |         $True {$ByDNSName = 0} # = ByDomainName | |||
|  |     } | |||
|  |     $Body = @{ | |||
|  |         jsonrpc = $ZabbixSession.jsonrpc | |||
|  |         method = "host.create" | |||
|  |         params = @{ | |||
|  |             host = $HostName | |||
|  |             interfaces = @( | |||
|  |                 @{ | |||
|  |                     type = $InterfaceType | |||
|  |                     main = $InterfaceMain | |||
|  |                     useip = $ByDNSName | |||
|  |                     ip = $IP | |||
|  |                     dns = $DNSName | |||
|  |                     port = $Port | |||
|  |                 } | |||
|  |             ) | |||
|  |             groups = @( | |||
|  |                 @{ | |||
|  |                     groupid = $GroupID | |||
|  |                 } | |||
|  |             ) | |||
|  |             templates = @( | |||
|  |                 @{ | |||
|  |                     templateid = $TemplateID | |||
|  |                 } | |||
|  |             ) | |||
|  |         } | |||
|  |         auth = $ZabbixSession.Session | |||
|  |         id = $ZabbixSession.id | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body -Depth 3 | |||
|  | 	$Res =  Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  | 
 | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Command successful | |||
|  |         $Res.result | Select-Object @{Name="hostids";Expression={$_.hostids[0]}} | |||
|  |     } | |||
|  |     else { | |||
|  |         #Command error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | <# 
 | |||
|  |  .Synopsis | |||
|  |   Get all zabbix proxy | |||
|  | 
 | |||
|  |  .Description | |||
|  |   Get all zabbix proxy | |||
|  | 
 | |||
|  |  .Parameter HostName | |||
|  |   To filter by name of the proxy | |||
|  | 
 | |||
|  |  .Parameter ProxyId | |||
|  |   To filter by id of the proxy | |||
|  | 
 | |||
|  |  .Parameter WithHosts | |||
|  |   Switch to show hosts supervised by the proxy  | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get all hosts managed by zabbix server | |||
|  |    Get-ZabbixProxy | |||
|  | 
 | |||
|  |  .Example | |||
|  |    # Get info about Server1 host | |||
|  |    Get-ZabbixProxy -HostName ZabbixProxy1 | |||
|  | #> | |||
|  | Function Get-ZabbixProxy { | |||
|  |     Param ( | |||
|  |         $HostName | |||
|  |         , | |||
|  |         $ProxyId | |||
|  |         , | |||
|  |         [Switch]$WithHosts | |||
|  |     ) | |||
|  | 
 | |||
|  |     Switch ($WithHosts.IsPresent) { | |||
|  |         $False {$SelectHosts = $null} # = Without hosts | |||
|  |         $True {$SelectHosts = "extend"} # = With hosts | |||
|  |     } | |||
|  | 
 | |||
|  |     $Body = @{ | |||
|  | 	    jsonrpc = $ZabbixSession.jsonrpc | |||
|  | 	    method = "proxy.get" | |||
|  | 	    params = @{ | |||
|  | 		    output = "extend" | |||
|  |             selectInterface = "extend" | |||
|  |             proxyids = $ProxyId | |||
|  | 		    filter = @{ | |||
|  | 			    host = $HostName | |||
|  | 		    } | |||
|  |             selectHosts = $SelectHosts | |||
|  | 	    } | |||
|  | 	    id = $ZabbixSession.id | |||
|  | 	    auth = $ZabbixSession.Session | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body | |||
|  | 	$Res =  Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  | 
 | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Command successful | |||
|  |         $Res.result | |||
|  |     } | |||
|  |     else { | |||
|  |         #Command error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | <# 
 | |||
|  |  .Synopsis | |||
|  |   Update the Zabbix proxy of a host | |||
|  | 
 | |||
|  |  .Description | |||
|  |   Update the Zabbix proxy of a host | |||
|  | 
 | |||
|  |  .Parameter HostID | |||
|  |   ID of the host you want to update | |||
|  | 
 | |||
|  |  .Parameter ProxyId | |||
|  |   ID of the Zabbix proxy which will supervise the host | |||
|  | 
 | |||
|  |  .Example | |||
|  |   The host with the ID 10266 will be supervised by Zabbix Server himself | |||
|  |   Set-ZabbixHostProxy -HostID 10266 -ProxyId 0 | |||
|  | 
 | |||
|  |   .Example | |||
|  |   The host with the ID 10266 will be supervised by the Zabbix proxy with the ID 10267 | |||
|  |   Set-ZabbixHostProxy -HostID 10266 -ProxyId 10267 | |||
|  | #> | |||
|  | Function Set-ZabbixHostProxy { | |||
|  |     Param ( | |||
|  |         [Parameter(Mandatory=$True)] | |||
|  |         [int]$HostID | |||
|  |         , | |||
|  |         [Parameter(Mandatory=$True)] | |||
|  |         [int]$ProxyId | |||
|  |     ) | |||
|  | 
 | |||
|  |     if ($HostID -eq 0) { | |||
|  |         Write-Error "Please enter a Host ID" | |||
|  |         break | |||
|  |     } | |||
|  | 
 | |||
|  |     $Body = @{ | |||
|  | 	    jsonrpc = $ZabbixSession.jsonrpc | |||
|  | 	    method = "host.update" | |||
|  | 	    params = @{ | |||
|  |             hostid = $HostID | |||
|  |             proxy_hostid = $ProxyId | |||
|  | 	    } | |||
|  | 	    id = $ZabbixSession.id | |||
|  | 	    auth = $ZabbixSession.Session | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body | |||
|  | 	$Res =  Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  | 
 | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Command successful | |||
|  |         $Res.result | |||
|  |     } | |||
|  |     else { | |||
|  |         #Command error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | Function Get-ZabbixItem { | |||
|  |     Param ( | |||
|  |         [int]$HostID | |||
|  |         , | |||
|  |         [int]$ItemID | |||
|  |         , | |||
|  |         [string]$ItemName | |||
|  |         , | |||
|  |         [Switch]$Debug | |||
|  |     ) | |||
|  |     $Body = @{ | |||
|  | 	    jsonrpc = $ZabbixSession.jsonrpc | |||
|  | 	    method = "item.get" | |||
|  | 	    params = @{ | |||
|  | 		    output = "extend" | |||
|  |             hostids = $HostID | |||
|  |             itemids = $ItemID | |||
|  | 		    search = @{ | |||
|  |                 #name = $ItemName | |||
|  | 			    #key_ = "system" | |||
|  | 		    } | |||
|  |             sortfield = "name" | |||
|  | 	    } | |||
|  | 	    id = $ZabbixSession.id | |||
|  | 	    auth = $ZabbixSession.Session | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body | |||
|  |     Switch ($Debug.IsPresent) { | |||
|  |         $True {Write-Host $BodyJSON -ForegroundColor Yellow} | |||
|  |     } | |||
|  | 	$Res =  Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  |     Switch ($Debug.IsPresent) { | |||
|  |         $True {Write-Host $Res -ForegroundColor Yellow} | |||
|  |     } | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Command successful | |||
|  |         $Res.result | |||
|  |     } | |||
|  |     else { | |||
|  |         #Command error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | Function Get-ZabbixHostInterface { | |||
|  |     Param ( | |||
|  |         $HostID | |||
|  |     ) | |||
|  |     $Body = @{ | |||
|  | 	    jsonrpc = $ZabbixSession.jsonrpc | |||
|  | 	    method = "hostinterface.get" | |||
|  | 	    params = @{ | |||
|  | 		    output = "extend" | |||
|  |             hostids = $HostID | |||
|  | 	    } | |||
|  | 	    id = $ZabbixSession.id | |||
|  | 	    auth = $ZabbixSession.Session | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body | |||
|  |     $Res =  Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  | 
 | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Command successful | |||
|  |         $Res.result | | |||
|  |             Select-Object *,@{Name="type_name";Expression={ | |||
|  |                 switch ($_.type) { | |||
|  |                     "1" {"agent"; break} | |||
|  |                     "2" {"snmp"; break} | |||
|  |                     "3" {"ipmi"; break} | |||
|  |                     "4" {"jmx"; break} | |||
|  |                 } | |||
|  |             }} | |||
|  |     } | |||
|  |     else { | |||
|  |         #Command error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | ### Fonction non fonctionnelles ### | |||
|  | <#
 | |||
|  | Function Add-ZabbixHostInterface { | |||
|  |     Param ( | |||
|  |         [string]$HostID, | |||
|  |         [ValidateRange(1,4)]  | |||
|  |         [int]$InterfaceType = 1, | |||
|  |         [ValidateSet("agent","snmp","ipmi","jmx")]  | |||
|  |         [string]$InterfaceTypeName, | |||
|  |         [string]$IP, | |||
|  |         [string]$DNSName, | |||
|  |         [switch]$MonitorByDNSName, | |||
|  |         [int]$InterfaceMain = 0 | |||
|  |     ) | |||
|  | 
 | |||
|  |     Switch ($MonitorByDNSName.IsPresent) { | |||
|  |         $False {$ByDNSName = 1} # = ByIP | |||
|  |         $True {$ByDNSName = 0} # = ByDomainName | |||
|  |     } | |||
|  | 
 | |||
|  |     Switch ($InterfaceTypeName) { | |||
|  |         "agent" {$InterfaceType = 1; break} | |||
|  |         "snmp"  {$InterfaceType = 2; break} | |||
|  |         "ipmi"  {$InterfaceType = 3; break} | |||
|  |         "jmx"   {$InterfaceType = 4; break} | |||
|  |     } | |||
|  | 
 | |||
|  |     Switch ($InterfaceType) { | |||
|  |         "1" {$Port = "10050"; break} | |||
|  |         "2" {$Port = "161"; break} | |||
|  |         "3" {$Port = "623"; break} | |||
|  |         "4" {$Port = "11162"; break} | |||
|  |     } | |||
|  | 
 | |||
|  |     $Body = @{ | |||
|  | 	    jsonrpc = $ZabbixSession.jsonrpc | |||
|  | 	    method = "hostinterface.create" | |||
|  | 	    params = @{ | |||
|  |             hostids = $HostID | |||
|  |             dns = $DNSName | |||
|  |             ip = $IP | |||
|  |             main = $InterfaceMain | |||
|  |             port = $Port | |||
|  |             type = $InterfaceType | |||
|  |             useip = $ByDNSName | |||
|  | 	    } | |||
|  | 	    id = $ZabbixSession.id | |||
|  | 	    auth = $ZabbixSession.Session | |||
|  |     } | |||
|  | 
 | |||
|  |     $BodyJSON = ConvertTo-Json $Body | |||
|  |     Write-Host $BodyJSON | |||
|  |     $Res =  Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post | |||
|  | 
 | |||
|  |     if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") { | |||
|  |         #Command successful | |||
|  |         $Res.result | |||
|  |     } | |||
|  |     else { | |||
|  |         #Command error | |||
|  |         $Res.error | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | Add-ZabbixHostInterface -HostID (Get-ZabbixHost -HostName hv1).hostid -InterfaceTypeName snmp -DNSName hv1-2.maison.lan -MonitorByDNSName -IP 127.0.0.1 | |||
|  | Get-ZabbixHostInterface -HostID (Get-ZabbixHost -HostName hv1).hostid | |||
|  | #> |