Zabbix:Template BackupExec 2010 Jobs
Aus znilwiki
Changelog:
- 01.04.2014: Erste Öffentliche Version
Bekannte Fehler:
- Wenn ein Job "Nicht eingehalten" wurde gibt mein Tool ein "ZBX_NOTSUPPORTED" zurück - weil BackupExec auch nur ein -1 zurück gemeldet hat - was bedeutet das es dieses Auftrag nicht gibt. Der Auftrag wird beim AutoDiscovery weiterhin gefunden - aber die Items gehen alle auf grau bis ein Auftrag wieder einen anderen Fehlergrund hat. Ich suche noch wie ich in Fall von "Nicht eingehalten" an die Auftragsdaten kommen ...
Download
Download: ZabbixTemplateBackupExec2010.zip Version 1.0.0.73
Template für Zabbix 3.0.x: BackupExec2010_Template_Zabbix3.0.0.zip
Vorwort
Da wir alles mit Zabbix Überwachen wollten wir auch das vielfach eingesetzte BackupExec 2010 überwachen. Die Dienste waren schon mal mit der automatischen Diensteerkennung abgedeckt (siehe Zabbix:Template Windows Service Auto-Discover - Windows Dienste automatisch entdecken), nun fehlten noch die Aufträge.
Als Grundlage für dieses Template nahm ich die bemcmd.exe
die wohl seit mindestens BackupExec 12.5 immer mit dabei ist. Mein Tool prüft aber auf den Installationspfad von BackupExec 2010 in der Registry, für ältere Versionen müsste man diese Prüfung anpassen.
Screenshots / Bilder
Funktionsweise
Wie funktioniert es?
Die backupexec2010.exe
wird vom Zabbix Agenten auf dem jeweiligen Server aufgerufen.
Die .exe ermittelt in der Registry den Installationspfad von BackupExec 2010 und sucht darüber die bemcmd.exe
Diese wird von der backupexec2010.exe aufgerufen und kennt verschiedene Parameter:
/? oder -? : Hilfe Anzeigen discoverjobs : Erzeugt eine Liste im JSON Format über alle Backup-Aufträge die wiederkehrend geplant sind. (Job State 18) Diese Liste wird vom Zabbix Template für das Auto-Discovery genutzt. Zurück gegeben werden der Auftragsname und die eindeutige Job-ID (in { }). Des weiteren werden alle Aufträge die an einen anderen Auftrag angehängts sind (Job State 23) und alle Aufträge die von einem anderen Job abhängig sind auf grund von Richtlinien (Job State 25) erkannt und an das Template übergeben. Die nachfolgenden Parameter erwarten als 2. Parameter die Job Id! jobstatus : Gibt den Status des letzen Backup-Auftrages zurück. Dies wäre nicht ein aktuell laufender Backup-Auftrag. Bekannte Rückgabewerte für Trigger sind: 1 : Abgebrochen 3 : Erfolgreich (mit Ausnahmen) 6 : Fehlgeschlagen 19 : Erfolgreich jobhowlongago : Gibt die Zeit in Sekunden zurück die seit dem letzen Start des Auftrages vergangen sind. Mit einem Trigger läßt sich so abfangen das ein Auftrag nicht mehr wie geplant angelaufen ist. jobbytes : Gibt die gesamte gesicherte Datenmenge in Bytes zurück jobruntime : Gibt die Laufzeit des Backup-Auftrages in Sekunden zurück jobdirectorys : Gibt die Anzahl der gesicherten Verzeichnisse zurück jobfiles : Gibt die Anzahl der gesicherten Dateien zurück jobskipped : Gibt die Anzahl der übersprungenden Dateien zurück jobcorrupt : Gibt die Anzahl defekter, nicht gesicherten Dateien zurück jobinuse : Gibt die Anzahl von Dateien die in Benutzung waren und nicht gesichert werden konnten zurück
Damit könnt Ihr das ganze zuvor einmal auf der Kommandozeile / DOS-Box testen.
Template
Zunächst müsst Ihr unter
Administration -> General -> Value mapping
Das folgende, neue Value mapping anlegen:
Name: BackupExec 2010 Value: 1 Abgebrochen 3 Erfolgreich (mit Ausnahmen) 6 Fehlgeschlagen 19 Erfolgreich
Im Zip-Archiv findet Ihr neben der backupexec2010.exe
auch das Template in Deutsch.
Die deutschen Versionen findet Ihr nach dem Import in der Hostgruppe 'Templates znil.net' mit den Namen
znil Template BackupExec 2010 Auftragsueberwachung ACTIVE AGENT
Also nur eine Active Agent Version - paasiv müsstet ihr eben selbst daraus bauen bei Bedarf
Darin sind NUR die Items - keine Trigger - die müsst ihr euch selbst anlegen. Als Hilfe dafür habe ich z.B. die Rückgabewerte gebaut wie lange der letzte Start her ist. Damit lässt sich indirekt erkennen wenn z.B,. ein Job hängt (wenn er z.B. mehr als 25h nicht neu gestartet wurde) etc.
Download: ZabbixTemplateBackupExec2010.zip Version 1.0.0.73
Template für Zabbix 3.0.x: BackupExec2010_Template_Zabbix3.0.0.zip
Installation
Zur Installation müsst Ihr folgendes tun:
- Kopiert die
backupexec2010.exe
in das Verzeichnis in dem auch schon der Zabbix-Agent ist, z.B.
C:\Program Files\Zabbix
- Tragt in die Agenten-Konfigurationsdatei, in der Regel ist das die
zabbix_agentd.win.conf
die Zeile
UserParameter=znil.BackupExec2010[*],"C:\Program Files\Zabbix\backupexec2010.exe" $1 "$2"
ein - Pfad natürlich ggf. anpassen
- Startet des Zabbix Agenten Dienst neu
net stop "zabbix agent" net start "zabbix agent"
- Import eine der
.XML
Dateien in Zabbix und verknüpft diese mit dem Host. - Warten! Alle 3600 Sekunden = 1 Stunde wird die Abfrage gestartet.
- Da erst die Aufträge gefunden werden und dann daurch die Items angelegt werden dauert es eine Weile bis der Agent davon weis.
- Als Beschleunigung: Nachdem Ihr in Zabbix die Items sehen könnt startet den AGenten auf dem Server noch einmal neu. Wen Ihr noch einen Proxy dazwishen habt müsst ihr den Dienst auf diesen auch einmal neu starten ... oder einfach abwarten!
Quellcode
Hier noch für Interessierte der Quellcode der backupexec2010.exe
:
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Icon256-32.ico
#AutoIt3Wrapper_Outfile=BackupExec2010.exe
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_Description=Zabbix Available Windows Updates
#AutoIt3Wrapper_Res_Fileversion=1.0.0.74
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=2013 Bernhard Linz
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_Field=Website|http://znil.net
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs
#AutoIt3Wrapper_Res_Field=See You|znil.net
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt('MustDeclareVars', 1)
#Region ;************ Includes ************
#Include <Array.au3>
#include <Constants.au3>
#include <Date.au3>
#EndRegion ;************ Includes ************
; ##########################################################################################################################
; ##########################################################################################################################
; # backupexec2010.exe --> Tool for Check BackupJobs in Zabbix #
; # 2013 Bernhard Linz / Bernhard@znil.de / http://znil.net #
; # Idea and Original at Zabbix Wiki #
; # #
; # Latest Version of this Program and Template in German: #
; # http://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs #
; # #
; # ________ .__ __. __ __ .__ __. _______ .___________. #
; # | / | \ | | | | | | | \ | | | ____|| | #
; # `---/ / | \| | | | | | | \| | | |__ `---| |----` #
; # / / | . ` | | | | | | . ` | | __| | | #
; # / /----.| |\ | | | | `----.__| |\ | | |____ | | #
; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| #
; # #
; ##########################################################################################################################
; ##########################################################################################################################
; find the 'bemcmd.exe' - take a look at Registry of Host
Dim $SoftwareBasePaths[3] = ["HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 13.0", _
"HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 13.0", _
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 13.0"]
Global $bemcmdexe
Dim $aparameter[6]
$aparameter[0] = "-o23 -j -s18 -i" ; get a List of scheduled jobs
$aparameter[1] = "-o23 -j -s16" ; get a list of current running jobs
$aparameter[2] = '-o21 -e -j"Name of Job"' ; get last Exit-Code of a specific job by Name
$aparameter[3] = '-o21 -e -i{ID of Job}' ; get last Exit-Code of a specific job by ID
$aparameter[4] = "-o23 -j -s23 -i" ; get a List of jobs wich are linked to a master job
$aparameter[5] = "-o23 -j -s25 -i" ; get a List of jobs wich dependant for an policy job
Dim $stemp
Dim $atemp
Dim $aDateTemp
Dim $aRuntimeTemp
Dim $aBackupJobs_byName[1] = [ 0 ]
Dim $aBackupJobs_byID[1] = [ 0 ]
Dim $s_JSONOutput
Dim $sRunCommand
Dim $sJobStatus
Dim $iJobStatus
Dim $iJobhowlongago
Dim $iJobBytes
Dim $iJobRuntime
Dim $iJobDirectorys
Dim $iJobFiles
Dim $iJobSkipped
Dim $iJobCorrupt
Dim $iJobInUse
; 10 20 30 40 50 60 70 80
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $s_Header = _
"+------------------------------------------------------------------------------" & @CRLF & _
"| BackupExec2010.exe - Version " & FileGetVersion(@ScriptName) & @CRLF & _
"+------------------------------------------------------------------------------" & @CRLF & _
"| 2014 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net" & @CRLF & _
"+------------------------------------------------------------------------------" & @CRLF & _
@CRLF
; 10 20 30 40 50 60 70 80
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $s_HilfeText = _
"Hilfsprogramm für Zabbix als UserParameter um Backup-Aufträge zu überwachen" & @CRLF & _
"Getestet und entwickelt mit backupExec 2010 R3, wird aber auch mit vielen" & @CRLF & _
"älteren Versionen funktionieren - solange es eine bemcmd.exe im Programm-" & @CRLF & _
"Verzeichnis gibt." & @CRLF & _
"---------------------------------------------------------------------------" & @CRLF & _
@CRLF & _
"Aufruf: " & @CRLF & _
@CRLF & _
@ScriptName & " <Option> <Parameter>" & @CRLF & _
@CRLF & _
"Optionen:" & @CRLF & _
"---------" & @CRLF & _
" /? oder -? : Diese Hilfe Anzeigen" & @CRLF & _
@CRLF & _
" discoverjobs : Erzeugt eine Liste im JSON Format über alle Backup-Aufträge" & @CRLF & _
" die wiederkehrend geplant sind. (Job State 18) Diese Liste wird vom Zabbix" & @CRLF & _
" Template für das Auto-Discovery genutzt. Zurück gegeben werden" & @CRLF & _
" der Auftragsname und die eindeutige Job-ID (in { })." & @CRLF & _
" Des weiteren werden alle Aufträge die an einen anderen Auftrag" & @CRLF & _
" angehängts sind (Job State 23) und alle Aufträge die von einem" & @CRLF & _
" anderen Job abhängig sind auf grund von Richtlinien (Jon State 25)" & @CRLF & _
" erkannt und an das Template übergeben." & @CRLF & _
@CRLF & _
" jobstatus : Gibt den Status des letzen Backup-Auftrages zurück. Dies wäre" & @CRLF & _
" nicht ein aktuell laufender Backup-Auftrag." & @CRLF & _
" Bekannte Rückgabewerte für Trigger sind:" & @CRLF & _
" 1 : Abgebrochen" & @CRLF & _
" 3 : Erfolgreich (mit Ausnahmen)" & @CRLF & _
" 6 : Fehlgeschlagen" & @CRLF & _
" 19 : Erfolgreich" & @CRLF & _
@CRLF & _
" jobhowlongago : Gibt die Zeit in Sekunden zurück die seit dem letzen Start des" & @CRLF & _
" Auftrages vergangen sind. Mit einem Trigger läßt sich so abfangen" & @CRLF & _
" das ein Auftrag nicht mehr wie geplant angelaufen ist." & @CRLF & _
@CRLF & _
" jobbytes : Gibt die gesamte gesicherte Datenmenge in Bytes zurück" & @CRLF & _
@CRLF & _
" jobruntime : Gibt die Laufzeit des Backup-Auftrages in Sekunden zurück" & @CRLF & _
@CRLF & _
" jobdirectorys : Gibt die Anzahl der gesicherten Verzeichnisse zurück" & @CRLF & _
@CRLF & _
" jobfiles : Gibt die Anzahl der gesicherten Dateien zurück" & @CRLF & _
@CRLF & _
" jobskipped : Gibt die Anzahl der übersprungenden Dateien zurück" & @CRLF & _
@CRLF & _
" jobcorrupt : Gibt die Anzahl defekter, nicht gesicherten Dateien zurück" & @CRLF & _
@CRLF & _
" jobinuse : Gibt die Anzahl von Dateien die in Benutzung waren und nicht" & @CRLF & _
" gesichert werden konnten zurück" & @CRLF & _
@CRLF & _
"HINWEIS: Alle Rückgabewerte sind zum letzten beendeten Backup-Auftrag, nicht zu aktuell" & @CRLF & _
" laufenden Aufträgen. Durch 'jobhowlongago' und 'jobruntime' kann aber erkannt" & @CRLF & _
" wenn ein Job hängt - z.B. wenn der letzte Start des täglichen Backup mehr als" & @CRLF & _
" 25h zurück liegt" & @CRLF & _
@CRLF & _
"+------------------------------------------------------------------------------" & @CRLF & _
"| BackupExec2010.exe ist FREEWARE!" & @CRLF & _
"| Kopieren, weitergeben ausdrücklich erlaubt!" & @CRLF & _
"| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:" & @CRLF & _
"| http://http://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs" & @CRLF & _
"+------------------------------------------------------------------------------" & @CRLF
; ##########################################################################################################################
; ##########################################################################################################################
; ########################################
; ######## ## ## ## ## ###### ######## #### ####### ## ## ###### ########################################
; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ########################################
; ## ## ## #### ## ## ## ## ## ## #### ## ## ########################################
; ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ########################################
; ## ## ## ## #### ## ## ## ## ## ## #### ## ########################################
; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ########################################
; ## ####### ## ## ###### ## #### ####### ## ## ###### ########################################
; ########################################
; ##########################################################################################################################
; ##########################################################################################################################
Func _bemcmd($sbemparameter)
Local $sRunCommand
Local $outputBEMCMD
Local $errorsBEMCMD
Local $hBEMCMD
Local $iBEMCMDmaxWaitTime = 20000
Local $iBEMCMDmaxWaitTimeSTART
Local $stdoutReadFEHLER
; build the Command for run
$sRunCommand = $bemcmdexe & " " & $sbemparameter
; Start the timer for max wait time
$iBEMCMDmaxWaitTimeSTART = TimerInit()
; run the Command
$hBEMCMD = Run($sRunCommand, "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)
;get the output
Do
Sleep(5)
; get the output
$outputBEMCMD = $outputBEMCMD & StdoutRead($hBEMCMD)
; get the errors
$errorsBEMCMD = $errorsBEMCMD & StderrRead($hBEMCMD)
; did we have an error while reading?
$stdoutReadFEHLER = @error
If $stdoutReadFEHLER <> "" Then
; No error, go on
If $outputBEMCMD = "" Then
; but also no output, let us take a 2. try
$outputBEMCMD = $outputBEMCMD & StdoutRead($hBEMCMD)
If $outputBEMCMD = "" Then
; anymore no output, oh oh
If $stdoutReadFEHLER <> "" Then
; but we have an error message
ConsoleWriteError($errorsBEMCMD & @CRLF)
EndIf
EndIf
EndIf
EndIf
Until $stdoutReadFEHLER Or TimerDiff($iBEMCMDmaxWaitTimeSTART) > $iBEMCMDmaxWaitTime
;MsgBox(0,"",$outputBEMCMD)
Return $outputBEMCMD
EndFunc ;<== End _bemcmd()
; ###################################################################################
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt
; Wir zudem für die Prüfung der Gruppenzugehörigkeit benötigt für Gruppen mit Umlauten, z.B. Domänen-Admins
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&threadID=9461&highlight=ANSI2OEM
Func _ANSI2OEM($text)
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')
Return $text[2]
;Return $text
EndFunc ;==>_ANSI2OEM
; ###################################################################################
; Hilfsroutine die den Hilfetext ausgibt
Func _HilfeAusgeben()
ConsoleWrite(_ANSI2OEM($s_Header))
ConsoleWrite(_ANSI2OEM($s_HilfeText))
EndFunc ;==>_HilfeAusgeben
; ##########################################################################################################################
; ##########################################################################################################################
; ####################################################################################
; ## ## ### #### ## ## ####################################################################################
; ### ### ## ## ## ### ## ####################################################################################
; #### #### ## ## ## #### ## ####################################################################################
; ## ### ## ## ## ## ## ## ## ####################################################################################
; ## ## ######### ## ## #### ####################################################################################
; ## ## ## ## ## ## ### ####################################################################################
; ## ## ## ## #### ## ## ####################################################################################
; ####################################################################################
; ##########################################################################################################################
; ##########################################################################################################################
If $CmdLine[0] > 0 Then
If $CmdLine[1] = "/?" Or $CmdLine[1] = "-?" Then
_HilfeAusgeben()
Exit 0
EndIf
EndIf
; Ok, we need the bemcmd.exe, just find the BackupExec Installation Folder
; we take 3 try - depends of we are a 32 or 64 bit exe and if we run on a 32 or 64 bit system
$bemcmdexe = RegRead($SoftwareBasePaths[0], "InstallLocation")
If $bemcmdexe = "" Then
$bemcmdexe = RegRead($SoftwareBasePaths[1], "InstallLocation")
If $bemcmdexe = "" Then
$bemcmdexe = RegRead($SoftwareBasePaths[2], "InstallLocation")
If $bemcmdexe = "" Then
ConsoleWriteError("Error, no installed BackupExec 2010 found" & @CRLF)
Exit 1
EndIf
EndIf
EndIf
$bemcmdexe = $bemcmdexe & "bemcmd.exe"
If StringInStr($CmdLineRaw, "discoverjobs") > 0 Then
Dim $s_JSONOutput
; Get all scheduled Jobs
$stemp = _bemcmd($aparameter[0])
$atemp = StringSplit($stemp, @CRLF)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("JOB ID: ")) = "JOB ID: " Then
_ArrayAdd($aBackupJobs_byID, StringReplace(StringReplace(StringReplace($atemp[$i], "JOB ID: ", ""),"{",""),"}",""))
$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1
EndIf
If StringLeft($atemp[$i],StringLen("JOB NAME: ")) = "JOB NAME: " Then
_ArrayAdd($aBackupJobs_byName, StringReplace($atemp[$i], "JOB NAME: ", ""))
$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1
EndIf
Next
; Get all linked Jobs
$stemp = _bemcmd($aparameter[4])
$atemp = StringSplit($stemp, @CRLF)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("JOB ID: ")) = "JOB ID: " Then
_ArrayAdd($aBackupJobs_byID, StringReplace(StringReplace(StringReplace($atemp[$i], "JOB ID: ", ""),"{",""),"}",""))
$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1
EndIf
If StringLeft($atemp[$i],StringLen("JOB NAME: ")) = "JOB NAME: " Then
_ArrayAdd($aBackupJobs_byName, StringReplace($atemp[$i], "JOB NAME: ", ""))
$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1
EndIf
Next
; Get all dependant policy jobs
$stemp = _bemcmd($aparameter[5])
$atemp = StringSplit($stemp, @CRLF)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("JOB ID: ")) = "JOB ID: " Then
_ArrayAdd($aBackupJobs_byID, StringReplace(StringReplace(StringReplace($atemp[$i], "JOB ID: ", ""),"{",""),"}",""))
$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1
EndIf
If StringLeft($atemp[$i],StringLen("JOB NAME: ")) = "JOB NAME: " Then
_ArrayAdd($aBackupJobs_byName, StringReplace($atemp[$i], "JOB NAME: ", ""))
$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1
EndIf
Next
$s_JSONOutput = '{"data":[' & @CRLF
For $i = 1 To $aBackupJobs_byName[0]
$s_JSONOutput = $s_JSONOutput & " " & '{' & '@CRLF' & _
" " & '"{#BACKUPEXECJOB}":"' & $aBackupJobs_byName[$i] & '",' & '@CRLF' & _
" " & '"{#BACKUPEXECID}":"' & $aBackupJobs_byID[$i] & '"' & '@CRLF' & _
" " & '},' & '@CRLF'
Next
$s_JSONOutput = StringTrimRight($s_JSONOutput, StringLen("," & "@CRLF")) & @CRLF & " " & ']' & @CRLF & '}'
$s_JSONOutput = StringReplace($s_JSONOutput, "@CRLF", @CRLF)
ConsoleWrite($s_JSONOutput & @CRLF)
EndIf
;MsgBox(0,"",$CmdLineRaw & @CRLF & $CmdLine[0] & @CRLF & $CmdLine[1] & @CRLF & $CmdLine[2])
If $CmdLine[0] = 2 Then
If $CmdLine[1] = "jobstatus" Then
;MsgBox(0, "", "jobstatus von: " & $CmdLine[2])
; Get all scheduled Jobs
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
$atemp = StringSplit($stemp, @CRLF)
;_ArrayDisplay($atemp)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("JOB STATUS: ")) = "JOB STATUS: " Then
$sJobStatus = StringReplace($atemp[$i], "JOB STATUS: ", "")
$iJobStatus = StringRegExpReplace($sJobStatus, "[^0-9]*","")
ConsoleWrite($iJobStatus & @CRLF)
Exit 0
EndIf
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
Exit 0
EndIf
Next
EndIf
If $CmdLine[1] = "jobhowlongago" Then
; Get all scheduled Jobs
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
$atemp = StringSplit($stemp, @CRLF)
;_ArrayDisplay($atemp)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("START TIME: ")) = "START TIME: " Then
$stemp = StringRegExpReplace($atemp[$i], "START TIME:\s*", "")
$aDateTemp = StringSplit($stemp, " /")
; [1] = Monat
; [2] = Tag
; [3] = Jahr
; [4] = Uhrzeit als hh:mm:ss
;_ArrayDisplay($aDateTemp)
$iJobhowlongago = _DateDiff("s", $aDateTemp[3] & "/" & $aDateTemp[1] & "/" & $aDateTemp[2] & " " & $aDateTemp[4], @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
;MsgBox(0,"", $aDateTemp[3] & "/" & $aDateTemp[1] & "/" & $aDateTemp[0] & " " & $aDateTemp[4] & @CRLF & @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
ConsoleWrite($iJobhowlongago & @CRLF)
Exit 0
EndIf
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
Exit 0
EndIf
Next
EndIf
If $CmdLine[1] = "jobbytes" Then
; Get all scheduled Jobs
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
$atemp = StringSplit($stemp, @CRLF)
;_ArrayDisplay($atemp)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("BYTES PROCESSED:")) = "BYTES PROCESSED:" Then
$stemp = StringRegExpReplace($atemp[$i], "BYTES PROCESSED:\s*", "")
$iJobBytes = StringReplace($stemp, ",", "")
ConsoleWrite($iJobBytes & @CRLF)
Exit 0
EndIf
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
Exit 0
EndIf
Next
EndIf
If $CmdLine[1] = "jobruntime" Then
; Get all scheduled Jobs
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
$atemp = StringSplit($stemp, @CRLF)
;_ArrayDisplay($atemp)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("ELAPSED TIME:")) = "ELAPSED TIME:" Then
$stemp = StringRegExpReplace($atemp[$i], "ELAPSED TIME:\s*", "")
$aRuntimeTemp = StringSplit($stemp,":")
; [1] = Stunden
; [2] = Minuten
; [3] = Sekunden
$iJobRuntime = Int($aRuntimeTemp[3]) + (Int($aRuntimeTemp[2]) * 60) + (Int($aRuntimeTemp[1]) * 3600)
ConsoleWrite($iJobRuntime & @CRLF)
Exit 0
EndIf
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
Exit 0
EndIf
Next
EndIf
If $CmdLine[1] = "jobdirectorys" Then
; Get all scheduled Jobs
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
$atemp = StringSplit($stemp, @CRLF)
;_ArrayDisplay($atemp)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("DIRECTORIES PROCESSED:")) = "DIRECTORIES PROCESSED:" Then
$stemp = StringRegExpReplace($atemp[$i], "DIRECTORIES PROCESSED:\s*", "")
$iJobDirectorys = StringReplace($stemp, " ", "")
ConsoleWrite($iJobDirectorys & @CRLF)
Exit 0
EndIf
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
Exit 0
EndIf
Next
EndIf
If $CmdLine[1] = "jobfiles" Then
; Get all scheduled Jobs
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
$atemp = StringSplit($stemp, @CRLF)
;_ArrayDisplay($atemp)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("FILES PROCESSED:")) = "FILES PROCESSED:" Then
$stemp = StringRegExpReplace($atemp[$i], "FILES PROCESSED:\s*", "")
$iJobFiles = StringReplace($stemp, " ", "")
ConsoleWrite($iJobFiles & @CRLF)
Exit 0
EndIf
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
Exit 0
EndIf
Next
EndIf
If $CmdLine[1] = "jobskipped" Then
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
$atemp = StringSplit($stemp, @CRLF)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("FILES SKIPPED:")) = "FILES SKIPPED:" Then
$stemp = StringRegExpReplace($atemp[$i], "FILES SKIPPED:\s*", "")
$iJobSkipped = StringReplace($stemp, " ", "")
ConsoleWrite($iJobSkipped & @CRLF)
Exit 0
EndIf
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
Exit 0
EndIf
Next
EndIf
If $CmdLine[1] = "jobcorrupt" Then
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
$atemp = StringSplit($stemp, @CRLF)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("FILES CORRUPT:")) = "FILES CORRUPT:" Then
$stemp = StringRegExpReplace($atemp[$i], "FILES CORRUPT:\s*", "")
$iJobCorrupt = StringReplace($stemp, " ", "")
ConsoleWrite($iJobCorrupt & @CRLF)
Exit 0
EndIf
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
Exit 0
EndIf
Next
EndIf
If $CmdLine[1] = "jobinuse" Then
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
$atemp = StringSplit($stemp, @CRLF)
For $i = 1 To $atemp[0]
If StringLeft($atemp[$i],StringLen("FILES IN-USE:")) = "FILES IN-USE:" Then
$stemp = StringRegExpReplace($atemp[$i], "FILES IN-USE:\s*", "")
$iJobInUse = StringReplace($stemp, " ", "")
ConsoleWrite($iJobInUse & @CRLF)
Exit 0
EndIf
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
Exit 0
EndIf
Next
EndIf
EndIf
Exit 0
--Bernhard Linz 11:03, 1. Apr. 2014 (CEST)