Zabbix 6.0のテンプレートをPowerShellからAPIを叩いて全て削除

kiuyu

2023/06/04

Zabbixを作っても組み込みのテンプレートは使わず、自分好みのテンプレートを作っていくことが多いので全部削除する方法をメモ。手でポチポチやっても良いが、面倒なのでPowerShellからZabbix APIを使って削除。

一応、後から必要になる可能性を考えて削除前にすべてエクスポートする。

# APIたたくやつ
function ExecZbxApi([string] $method, [object] $params, [string] $zabbixUri, [object] $token) {
    $body = @{
        jsonrpc = '2.0'
        method = $method
        id = 1
        auth = $token
        params = $params
    }
    
    $bodyJson = $body | ConvertTo-Json -Depth 100
    $res = Invoke-RestMethod -Uri $zabbixUri -ContentType 'application/json-rpc' -Method Post -Body $bodyJson -ErrorAction:Stop

    if ($null -ne ($res | Get-Member -Name 'error')) {
        throw $res.error
    }

    return $res.result
}

# ログイン。Uriやユーザ名、パスワードは適宜変えること。
$zabbixUri = 'http://192.168.0.1/zabbix/api_jsonrpc.php'
$para = @{ user = 'Admin'; password = 'zabbix'}
$token = ExecZbxApi 'user.login' $para $zabbixUri $null

# テンプレートID取得
$para = @{ output = 'templateid' }
$templateIds = (ExecZbxApi 'template.get' $para $zabbixUri $token).templateid

# テンプレートエクスポート
$exportDir = 'C:\tmp'
$templateIds | ForEach-Object {
    $para = @{ options = @{ templates = @( $_ )}; format = 'xml' }
    $templateXml = [xml](ExecZbxApi 'configuration.export' $para $zabbixUri $token)

    $exportPath = Join-Path $exportDir ($templateXml.zabbix_export.templates.template.name + '.xml')
    $templateXml.Save($exportPath)
}

# テンプレート削除
$templateIds | ForEach-Object {
    ExecZbxApi 'template.delete' @( $_ ) $zabbixUri $token
}

# ログアウト
ExecZbxApi 'user.logout' @() $zabbixUri $token