Inital Upload
This commit is contained in:
164
PRTG/Custom Sensors/EXEXML/Get-AcronisJobResults.ps1
Normal file
164
PRTG/Custom Sensors/EXEXML/Get-AcronisJobResults.ps1
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
PRTG Acronis Backup Statusreport
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
Dieses Script wertet den Status der Windows Server Sicherung aus
|
||||||
|
und versendet auf Basis der Daten eine Mail im HTML-Format über den
|
||||||
|
Status der letzten Sicherung. Zusätzlich werden Informationen über das
|
||||||
|
Sicherungsmedium und den freien Speicher übermittelt.
|
||||||
|
|
||||||
|
.PARAMETER Server
|
||||||
|
The IP or DNS of the Server running Acronis. You can use the %host parameter of PRTG.
|
||||||
|
|
||||||
|
.PARAMETER User
|
||||||
|
User with login rights to Acronis.
|
||||||
|
|
||||||
|
.PARAMETER Password
|
||||||
|
The Password for the User.
|
||||||
|
|
||||||
|
.OUTPUTS
|
||||||
|
PRTG XML to console
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
C:\PS> Get-AcronisJobResults.ps1 -Server acronis.company.com -User company\backupAdmin -Password securePhrase1
|
||||||
|
|
||||||
|
.LINK
|
||||||
|
https://www.ksite.de
|
||||||
|
|
||||||
|
.NOTES
|
||||||
|
AUTHOR : Ralf Kirchner
|
||||||
|
EMAIL : rkirchner@ksite.de
|
||||||
|
DATE : 30.06.2018
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#>
|
||||||
|
|
||||||
|
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$True)][string]$Server,
|
||||||
|
[string]$User,
|
||||||
|
[string]$Password
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
#PRTG wants numeric values. Acronis provides the last result as string.
|
||||||
|
$ResultLookUp=@{"ok" = 0; "Warning" = 1; "Error" = 2; "Failed" = 2}
|
||||||
|
|
||||||
|
#Helper function for writing the same XML format for all kind of jobs.
|
||||||
|
function Build-XML($Job, $LastResult)
|
||||||
|
{
|
||||||
|
write-host "<result>"
|
||||||
|
|
||||||
|
write-host -NoNewline "<channel>"
|
||||||
|
write-host -NoNewline $Job
|
||||||
|
write-host "</channel>"
|
||||||
|
|
||||||
|
write-host -NoNewline "<value>"
|
||||||
|
write-host -NoNewline $ResultLookUp[$LastResult]
|
||||||
|
write-host "</value>"
|
||||||
|
|
||||||
|
write-host "<float>0</float>"
|
||||||
|
|
||||||
|
write-host "<ValueLookup>ps.acronis.jobState</ValueLookup>"
|
||||||
|
|
||||||
|
write-host "</result>"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$command = @'
|
||||||
|
cmd.exe /C "C:\Program Files\Acronis\CommandLineTool\acrocmd.exe" list plans --host=$HostName --credentials=$LoginName,$LoginPassword --log="c:\tmp\AcronisBackupStatus.xml"
|
||||||
|
'@
|
||||||
|
|
||||||
|
################# erstellen der XML datei und einlesen
|
||||||
|
|
||||||
|
function Test-XMLFile {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Test the validity of an XML file
|
||||||
|
#>
|
||||||
|
[CmdletBinding()]
|
||||||
|
param (
|
||||||
|
[parameter(mandatory=$true)][ValidateNotNullorEmpty()][string]$xmlFilePath
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check the file exists
|
||||||
|
if (!(Test-Path -Path $xmlFilePath))
|
||||||
|
{
|
||||||
|
throw "$xmlFilePath is not valid. Please provide a valid path to the .xml fileh"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for Load or Parse errors when loading the XML file
|
||||||
|
$xml = New-Object System.Xml.XmlDocument
|
||||||
|
try {
|
||||||
|
$xml.Load((Get-ChildItem -Path $xmlFilePath).FullName)
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
catch [System.Xml.XmlException] {
|
||||||
|
Write-Verbose "$xmlFilePath : $($_.toString())"
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Invoke-Expression -Command:$command
|
||||||
|
|
||||||
|
$Data = New-Object xml
|
||||||
|
$Data.psbase.PreserveWhitespace = $false
|
||||||
|
while ((Test-XMLFile "c:\tmp\AcronisBackupStatus.xml") -eq $false ) {
|
||||||
|
$null = Invoke-Expression -Command:$command
|
||||||
|
}
|
||||||
|
|
||||||
|
$Data.Load("c:\tmp\AcronisBackupStatus.xml")
|
||||||
|
|
||||||
|
ForEach( $Plan in $Data.list_plans.output_data.list.plan ) {
|
||||||
|
$Plan.Status = $Plan.Status.Replace("`r`n","")
|
||||||
|
$Plan.Status = $Plan.Status.Replace(" ","")
|
||||||
|
$Plan.Status = $Plan.Status.ToLower()
|
||||||
|
If ($Plan.Status -eq "ok") {
|
||||||
|
$errorvalue = 0
|
||||||
|
} else {
|
||||||
|
$errorvalue = $errorvalue + 1
|
||||||
|
$text = $text + $Plan.Name + "has Status " + $Plan.Status + " ! "
|
||||||
|
}
|
||||||
|
$Readdate = [datetime]::ParseExact($Plan.next_start.substring(0,19), "dd.MM.yyyy HH:mm:ss", $null)
|
||||||
|
if ($Readdate -ge $curdate) {
|
||||||
|
} else {
|
||||||
|
$errorvalue = $errorvalue + 1
|
||||||
|
$text = $text + $Plan.Name + "has Next Start Time in the Past : " + $Readdate + " ! "
|
||||||
|
}
|
||||||
|
$Plan.State = $Plan.State.Replace("`r`n","")
|
||||||
|
$Plan.State = $Plan.State.Replace(" ","")
|
||||||
|
$Plan.State = $Plan.State.ToLower()
|
||||||
|
$Plan.State
|
||||||
|
If ($Plan.State -eq "need_interaction") {
|
||||||
|
$errorvalue = $errorvalue + 1
|
||||||
|
$text = $text + $Plan.Name + "has State Need Interaction ! "
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"<prtg>"
|
||||||
|
"<result>"
|
||||||
|
"<channel>"
|
||||||
|
"BackupStatus"
|
||||||
|
"</channel>"
|
||||||
|
"<unit>Custom</unit>"
|
||||||
|
"<CustomUnit>Status</CustomUnit>"
|
||||||
|
"<FLOAT>0</FLOAT>"
|
||||||
|
"<value>"
|
||||||
|
echo $errorvalue
|
||||||
|
"</value>"
|
||||||
|
"<LimitMaxError>0,5</LimitMaxError>"
|
||||||
|
"<LimitMode>1</LimitMode>"
|
||||||
|
"</result>"
|
||||||
|
"<Text>"
|
||||||
|
If ($errorvalue -eq 0) {
|
||||||
|
echo "Alles Ok"
|
||||||
|
} else {
|
||||||
|
echo $text
|
||||||
|
}
|
||||||
|
"</Text>"
|
||||||
|
"</prtg>"
|
||||||
16
README.md
16
README.md
@@ -1,3 +1,17 @@
|
|||||||
# PRTG-AcronisBackup
|
# PRTG-AcronisBackup
|
||||||
|
|
||||||
PRTG Sensor für Acronis Backup Monitoring
|
PRTG Sensor für Acronis Backup Monitoring
|
||||||
|
|
||||||
|
# Download
|
||||||
|
[ZIP-Datei mit der Vorlage und den erforderlichen zusätzlichen Dateien.](https://dev.ksite.de/rkirchner/PRTG-AcronisBackup/archive/master.zip)
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
Alle Dateien im PRTG-Unterverzeichnis müssen in das PRTG-Programmverzeichnis aufgenommen werden.
|
||||||
|
|
||||||
|
Das bedeutet, kopieren Sie die Dateien von "PRTG" in "%programfiles (x86)%\PRTG Network Monitor" und die
|
||||||
|
Dateien werden an die richtigen Stellen in den Unterverzeichnissen kopiert.
|
||||||
|
|
||||||
|
Wenn das Paket MIB-Dateien enthält, werden diese erst geladen, wenn PRTG neu gestartet wird.
|
||||||
|
Suchvorgänge können manuell neu geladen werden, indem Sie auf der Seite Admin Tools "*Setup -> Systemverwaltung -> Verwaltung*" klicken, oder im Webbrowser die URL: *https://{PRTGServerIPandPort}/api/loadlookups.htm* aufrufen.
|
||||||
|
|
||||||
|
Die restlichen Dateien dienen zur Dokumentation und zum Testen.
|
||||||
|
|||||||
Reference in New Issue
Block a user