L'exemple ci-dessous utilise le module PowerShell PSBBIX qui encapsule les commandes de l'API Zabbix.
Parmi les nombreuses commandes, pour exemple, le script propose de désactiver ou activer les items (points de supervision) d'un host spécifique.
N'hésitez pas pour plus de détails a aller voir le github de PSBBIX (https://github.com/yubu/psbbix-zabbix-api)
ZabbixManageHostItems.ps1
#########################################################
### ENABLE/DISABLED ALL SPECIFIC ITEMS FOR A ZABBIX HOST
### Params:
### $ZabbixSrv: Target Zabbix Server
### $TargetHost: Target host to treat
### $ItemPattern: Pattern of Items to check
### $Action: Disable or Enable
#########################################################
Param(
[Parameter(Mandatory=$true)] $ZabbixSrv,
[Parameter(Mandatory=$true)] $TargetHost,
[Parameter(Mandatory=$true)] $ItemPattern,
[Parameter(Mandatory=$true)] $Action
)
if ($PSBoundParameters.Count -lt 4)
{
write-host -F Red "Too few arguments!"
write-host -F Yellow "ZabbixSrv: Target Zabbix Server`nTargetHost: Target host to treat`nItemPattern: Pattern of Items to check`nAction: Disable or Enable"
exit 1
}
switch($Action)
{
"disable" {$status = 1}
"enable" {$status = 0}
default {Write-Host -F Red "Possible value for Action is 'enable' or 'disable' - END OF SCRIPT" ; exit 0}
}
# Check if psbbix module is loaded
if (!(get-module psbbix))
{
write-host -F Yellow "psbbix module is not loaded...search module to load it..."
$modulepath = $env:PSModulePath -split ‘;’ | foreach {Get-ChildItem -Recurse -Path $_ | Where-Object {$_.name -eq "psbbix.psm1"}}
if (!$modulepath)
{
write-host -F Yellow "unable to find psbbix.psm1...get it on https://github.com/yubu/psbbix-zabbix-api"
exit 1
}
Else
{
try
{
Import-Module $($modulepath | select -Unique).fullname
}
catch
{
write-host -F error "Error during import of psbbix module"
exit 1
}
}
Write-Host -F Green "...Module loaded"
}
$cred = Get-Credential -Credential "myaccount"
# Connect to zabbix server
try
{
Connect-Zabbix $ZabbixSrv -PSCredential $cred
}
catch
{
Write-Host -F Red "Error during connection to $ZabbixSrv"
exit 1
}
# Get all items that we want to disable
$items = Get-ZabbixItem -hostid $(Get-ZabbixHost -HostName $TargetHost).hostid | Where-Object {$_.name -like $ItemPattern}
if ($items.Count -eq 0)
{
Write-Host -F Yellow "No items found with '$ItemPattern' pattern for $TargetHost host"
}
Else
{
try
{
$items | foreach {Set-ZabbixItem -itemid $_.itemid -status $status}
}
catch
{
write-host -F Red "Error during modification of Items status"
exit 1
}
}
Write-host "`nFollowing items have been treated for $TargetHost`:`n"
$items = Get-ZabbixItem -hostid $(Get-ZabbixHost -HostName $TargetHost).hostid | Where-Object {$_.name -like $ItemPattern}
$items | foreach {$_.name +" -- "+ $(switch($_.status){0{"enabled"}1{"disabled"}})}