diff --git a/Monitor-VeeamJobs.ps1 b/Monitor-VeeamJobs.ps1
index 6bb4467..590ed73 100644
--- a/Monitor-VeeamJobs.ps1
+++ b/Monitor-VeeamJobs.ps1
@@ -242,6 +242,27 @@ function ConvertTo-ZabbixText {
return $text
}
+function Format-VeeamJobSummary {
+ param(
+ [Parameter(Mandatory = $true)]
+ [string]$Enabled,
+
+ [Parameter(Mandatory = $true)]
+ [string]$LastRun,
+
+ [Parameter(Mandatory = $true)]
+ [string]$NextRun,
+
+ [Parameter(Mandatory = $true)]
+ [string]$Result,
+
+ [Parameter(Mandatory = $true)]
+ [string]$RestorePoints
+ )
+
+ return 'Enabled: {0} | Last: {1} | Next: {2} | Result: {3} | Restore points: {4}' -f $Enabled, $LastRun, $NextRun, $Result, $RestorePoints
+}
+
function Get-VeeamJobScheduleEnabled {
param(
[Parameter(Mandatory = $true)]
@@ -531,24 +552,33 @@ function Get-VeeamJobMetrics {
$lastState = Get-VeeamJobLastState -Job $_ -LastSession $lastSession
$restorePoints = $null
$enabledNumeric = if ($scheduleEnabled -eq $false) { 0 } else { 1 }
+ $enabledText = if ($enabledNumeric -eq 1) { 'yes' } else { 'no' }
+ $lastRunText = ConvertTo-ZabbixText -Value (Get-VeeamJobLastRun -Job $_ -LastSession $lastSession)
+ $nextRunText = ConvertTo-ZabbixText -Value (Get-VeeamJobNextRun -Job $_)
+ $lastResultText = ConvertTo-ZabbixText -Value $lastResult
+ $lastStateText = ConvertTo-ZabbixText -Value $lastState
+ $resultText = ConvertTo-ZabbixText -Value $(if ($null -ne $lastResult) { $lastResult } else { $lastState })
if ($restorePointCounts.ContainsKey($jobName)) {
$restorePoints = $restorePointCounts[$jobName]
}
+ $restorePointsText = ConvertTo-ZabbixText -Value $restorePoints
+
[ordered]@{
key = ConvertTo-ZabbixJobKey -Name $jobName
name = $jobName
enabled = $scheduleEnabled
enabled_numeric = $enabledNumeric
- enabled_text = if ($enabledNumeric -eq 1) { 'yes' } else { 'no' }
- last_run = ConvertTo-ZabbixText -Value (Get-VeeamJobLastRun -Job $_ -LastSession $lastSession)
- next_run = ConvertTo-ZabbixText -Value (Get-VeeamJobNextRun -Job $_)
- last_result = ConvertTo-ZabbixText -Value $lastResult
- last_state = ConvertTo-ZabbixText -Value $lastState
- result = ConvertTo-ZabbixText -Value $(if ($null -ne $lastResult) { $lastResult } else { $lastState })
+ enabled_text = $enabledText
+ last_run = $lastRunText
+ next_run = $nextRunText
+ last_result = $lastResultText
+ last_state = $lastStateText
+ result = $resultText
restore_points = $restorePoints
- restore_points_text = ConvertTo-ZabbixText -Value $restorePoints
+ restore_points_text = $restorePointsText
+ summary = Format-VeeamJobSummary -Enabled $enabledText -LastRun $lastRunText -NextRun $nextRunText -Result $resultText -RestorePoints $restorePointsText
}
})
$disabledJobs = @($allJobs | Where-Object {
diff --git a/README.md b/README.md
index 1ed8385..1053e98 100644
--- a/README.md
+++ b/README.md
@@ -43,7 +43,8 @@ This repository contains PowerShell scripts for Veeam Backup & Replication:
"last_state": "Stopped",
"result": "Success",
"restore_points": 14,
- "restore_points_text": "14"
+ "restore_points_text": "14",
+ "summary": "Enabled: yes | Last: 2026-07-16 01:00:00 | Next: 2026-07-17 01:00:00 | Result: Success | Restore points: 14"
}
]
}
@@ -70,6 +71,7 @@ veeam.job.last_run[{#VEEAMJOBKEY}]
veeam.job.next_run[{#VEEAMJOBKEY}]
veeam.job.result[{#VEEAMJOBKEY}]
veeam.job.restore_points[{#VEEAMJOBKEY}]
+veeam.job.summary[{#VEEAMJOBKEY}]
```
`{#VEEAMJOBNAME}` is stored as a tag named `veeam_job`, so Zabbix views and
@@ -77,6 +79,18 @@ dashboard widgets can group or filter the discovered items by job name. The
legacy `veeam.jobs.table` item remains available as a quick text overview, but
the discovered items are the preferred way to build a dashboard.
+For a compact dashboard list, use the discovered summary item:
+
+```text
+Veeam job [JOB_NAME]: Summary
+```
+
+It displays one line per job:
+
+```text
+Enabled: yes | Last: 2026-07-16 01:00:00 | Next: - | Result: Success | Restore points: 14
+```
+
## Zabbix dashboard idea
Create a dashboard named `Veeam Jobs` for hosts linked to the `Veeam Backup Jobs`
@@ -91,7 +105,7 @@ Suggested widgets:
| Top row | Item value | `veeam.jobs.disabled` |
| Top row | Item value | `veeam.jobs.error` |
| Top row | Item value | `veeam.jobs.warning` |
-| Middle | Top hosts or item list | discovered `veeam.job.*` items |
+| Middle | Item list | discovered `Veeam job [*]: Summary` items |
| Bottom left | Item value or item list | `veeam.jobs.error.names` |
| Bottom center | Item value or item list | `veeam.jobs.warning.names` |
| Bottom right | Item value or item list | `veeam.jobs.disabled.names` |
diff --git a/zabbix-templete-veeam-jobs.xml b/zabbix-templete-veeam-jobs.xml
index e6fb775..1c6b964 100644
--- a/zabbix-templete-veeam-jobs.xml
+++ b/zabbix-templete-veeam-jobs.xml
@@ -537,6 +537,38 @@
+
+ db766a0ea9984a988cb49c5bb6a029b4
+ Veeam job [{#VEEAMJOBNAME}]: Summary
+ DEPENDENT
+ veeam.job.summary[{#VEEAMJOBKEY}]
+ 0
+
+ veeam.scripts.monitor
+
+ TEXT
+ Single-line summary for Veeam job {#VEEAMJOBNAME}: enabled state, last run, next run, latest result, and restore point count.
+
+
+ JSONPATH
+
+ $.jobs[?(@.key=="{#VEEAMJOBKEY}")].summary.first()
+
+
+
+ 90d
+ 0
+
+
+ component
+ backup
+
+
+ veeam_job
+ {#VEEAMJOBNAME}
+
+
+