Windows Server Sicherung mit PRTG überwachen

[Aktualisert: 21.09.2019] Je größer eine Serverumgebung um so wichtiger wir das Monitoring von Servern, derern Diensten und Aufgaben. Heute geht es um das Monitoring der Windows Server Sicherung. Es handelt sich dabei um ein Feature, welches ab Windows Server 2008 kostenlos von Microsoft mitgeliefert wird.

In diesem Usecase kommt bereits zur Überwachung des Netzwerks die Anwendung PRTG von Paessler zum Einsatz. Leider gibt es aktuell seitens Hersteller kein Sensor, um die Windows Server Sicherung bzw. den Job zu überwachen. Aber es gibt die Möglichekeit benutzerdefinierte Sensoren hinzu zufügen. Diese müssen natürlich erst einmal entwickelt werden.

Grundlage für mein Powershell-Skript, ist ein Kommentar aus der KB von Paessler. Natürlich habe ich das eine oder andere noch hinzgefügt und auch verschiedene Fehlerzustände abgefangen.

<#
.SYNOPSIS
Dieses Skript ruft Informationen zum Job der Windows Server Sicherung ab.

Daniel Wydler

THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE
RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER. 

.DESCRIPTION

 
.PARAMETER PrtgDevice
Der Gerätename als NetBIOS oder FQDN

 
.INPUTS
Name des abzufragenden Geräts
 
.OUTPUTS
Ausgabe des Status der Sicherung im XML-Format
 
.NOTES
File:           paessler-prtg_monitor-windows-server-backup-job.ps1
Version:        1.1
Author:         Daniel Wydler
Creation Date:  10.03.2019, 10:32 Uhr
Purpose/Change:
 
Date                   Comment
-----------------------------------------------
10.03.2019, 11:12 Uhr  Initial community release
10.03.2019, 17:01 Uhr  Code base revised
21.09.2019, 21:26 Uhr  Changed output in Set-PrtgError


.COMPONENT
Windows Server Sicherung auf dem Server, welcher gerpüft werden soll.

.LINK
https://github.com/dwydler/Powershell-Skripte/blob/master/Paessler/PRTG/paessler-prtg_monitor-windows-server-backup-job.ps1

.EXAMPLE
.\paessler-prtg_monitor-windows-server-backup-job.ps1 -PrtgDevice dc01
#>

#---------------------------------------------------------[Initialisations]--------------------------------------------------------

Param (
   [Parameter(
        ValueFromPipelineByPropertyName,
        Position=0,
        Mandatory=$true
    )]
   [string] $PrtgDevice
)

Clear-Host

#----------------------------------------------------------[Declarations]----------------------------------------------------------

[string] $strXmlOutput = ""

#-----------------------------------------------------------[Functions]------------------------------------------------------------

function Set-PrtgError {
    Param (
        [Parameter(Mandatory=$true)]
        	[ValidateNotNullOrEmpty()]
        [string]$PrtgErrorText
    )
    
    $strXmlOutput = "<prtg>`n"
    $strXmlOutput += "`t<error>1</error>`n"
    $strXmlOutput += "`t<text>$PrtgErrorText</text>`n"
    $strXmlOutput += "</prtg>"

    # Output Xml
    $strXmlOutput

    exit
}

#-------------------------------------------------------------[Modules]------------------------------------------------------------



#-----------------------------------------------------------[Execution]------------------------------------------------------------

# Prüfe, ob das Feature 'Windows Server Sicherung" auf dem Server installiert ist
$WindowsServerBackupInstalled = Invoke-Command -Computername $PrtgDevice -ScriptBlock { Get-WindowsFeature | where {$_.Name -eq "Windows-Server-Backup"} | Select -ExpandProperty Installed }

if (-not ($WindowsServerBackupInstalled) ) {
    Set-PrtgError -PrtgErrorText "Das Feature 'Windows Server Sicherung ist nicht installiert!"
}
else {
    $WindowsServerBackupStatus = Invoke-Command -Computername $PrtgDevice -ScriptBlock { Get-WBSummary }

    $strXmlOutput = "<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>`n"
    $strXmlOutput += "<prtg>`n"
    $strXmlOutput += "`t<Text>`n"
    $strXmlOutput += "`tLast successfull Backup: "
    $strXmlOutput += "$(get-date $WindowsServerBackupStatus.LastSuccessfulBackupTime -Format "dd.MM.yyyy HH:mm:ss")`n"
    $strXmlOutput += "`t</Text>`n"
    $strXmlOutput += "`t<result>`n"
    $strXmlOutput += "`t`t<Channel>Fehlercode</Channel>`n"
    $strXmlOutput += "`t`t<value>$($WindowsServerBackupStatus.LastBackupResultHR)</value>`n"
    $strXmlOutput += "`t</result>`n"
    $strXmlOutput += '</prtg>'

    # Return Xml
    $strXmlOutput
}

Quelle: Git Repository

Das Skript muss in das Verzeichnis „.\PRTG Network Monitor\Custom Sensors\EXEXML“ abgespeichert werden. Anschließend auf dem zuüberwachenden Gerät einen neuen Sensor vom Typ „Programm/Skript (Erweitert)“ hinzufügen. Bei Parameter geben wir die Variable %device an. Denn soll schließlich das übergeordnete Gerät abgefragt werden. Ansonsten einfach den Gerätenamen (NetBIOS) eintragen. Bei Sicherheitskontext ist es wichtig die Option „Die Zugangsdaten für Windows des übergeordneten Geräts verwenden“ auszuwählen. Denn der Dienst „PRTG Probe Service“ läuft standardmäßig unter dem Benutzer „Lokales System“. Somit ist natürlich einleuchtend, dass der Benutzer keine Verbindung zum abzufragenden System herstellen darf und kann.

Hier ein Screenshot, wenn der Sensor im Betrieb ist.

Viel Spaß beim Ausprobieren. 🙂