diff --git a/API/Zabbix-api.psm1 b/API/Zabbix-api.psm1 deleted file mode 100644 index a8485f2..0000000 --- a/API/Zabbix-api.psm1 +++ /dev/null @@ -1,628 +0,0 @@ -<# - .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 -#> \ No newline at end of file diff --git a/API/Zabbix-api.txt b/API/Zabbix-api.txt deleted file mode 100644 index 1f5f815..0000000 --- a/API/Zabbix-api.txt +++ /dev/null @@ -1,12 +0,0 @@ -Import-Module .\Zabbix-api.psm1 - -$Cred = Get-Credential -Connect-Zabbix -PSCredential $Cred -IPAdress 192.168.1.1 -Connect-Zabbix -PSCredential $Cred -IPAdress zabbix.domain.ru -UseSSL - -(Get-Module Zabbix).ExportedCommands - -Get-ZabbixHostInterface | ft -Get-ZabbixHost | ft -Get-ZabbixGroup | ft -Get-ZabbixTemplate | ft \ No newline at end of file