Monitoring with PowerShell: Monitoring Windows Server Backup

This past week I’ve been suffering from a terrible cold, so I haven’t been blogging very actively because my brain is running at 5% of it’s normal capacity. This blog has been requested a couple of times by readers. I whipped this up real quick…:)

Some MSPs are using Windows Server Backup as a ‘last resort’ type of backup, if online backups fail, or the backup software does not work, they still have an image based backup for those huge emergencies.

Monitoring WSB is thankfully fairly straight forward – Microsoft supplies the PowerShell module and it is able to grab all the information we need, such as the last backup error code, the last backup date and time, and of course if a job is currently running.

The Script

So nothing special about this one, except that you need the Windows Backup PowerShell module installed. It will error out if you do not. 🙂

$Date = (get-date).AddHours(-48)
try {
    $Summary = Get-WBSummary
    $CurrentJob = Get-WBJob
}
catch {
    write-host "Could not execute PowerShell command to get backup status: $($_.Exception.Message)"
    exit 1
}

$FailedBackups = invoke-command {
    if ($CurrentJob.JobState -eq 'Running' -and $CurrentJob.StartTime -lt (get-date).AddHours(-23)) { "Backup has been running for over 23 hours. Backup Started at $($CurrentJob.StartTime)" }
    if ($Summary.LastBackupResultHR -ne '0') { "Backup has completed with error code $($Summary.LastBackupResultHR). Last Backup Started at $($Summary.LastBackupTime)" }
    if ($Summary.LastSuccessfulBackupTime -lt $date) { "No succesfull backup for the last 48 hours." }
}

if ($FailedBackups) {
    write-host "Failed backups found. Please check diagnostic information"
    write-host ($FailedBackups, $Summary | Out-String)
    exit 1
}
else {
    write-host "Healthy. No Failed backups"
    write-host ($FailedBackups, $Summary | Out-String)
}

And that’s it! as always, Happy PowerShelling.

2 Comments

  1. JOHN September 19, 2021 at 11:11 pm

    Im interested in this script. Can you modify it to check multiple servers as well as to be exported to txt or csv?

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.