commit 38b674d034d83fdb97fcb7bd23c2c3ad52429dc4 Author: Bernhard Date: Sun Sep 10 14:30:46 2017 +0200 First Upload diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..751553b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.bak diff --git a/BEMCLI_en.chm b/BEMCLI_en.chm new file mode 100644 index 0000000..fe52cdd Binary files /dev/null and b/BEMCLI_en.chm differ diff --git a/BackupExecPS.au3 b/BackupExecPS.au3 new file mode 100644 index 0000000..c4489d4 --- /dev/null +++ b/BackupExecPS.au3 @@ -0,0 +1,652 @@ +#NoTrayIcon +#Region ;**** Directives created by AutoIt3Wrapper_GUI **** +#AutoIt3Wrapper_Icon=Icon256-32.ico +#AutoIt3Wrapper_Outfile=BackupExecPS.exe +#AutoIt3Wrapper_UseUpx=y +#AutoIt3Wrapper_Change2CUI=y +#AutoIt3Wrapper_Res_Description=Zabbix Available Windows Updates +#AutoIt3Wrapper_Res_Fileversion=0.0.0.73 +#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y +#AutoIt3Wrapper_Res_LegalCopyright=2016 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_PS_Jobs +#AutoIt3Wrapper_Res_Field=See You|znil.net +#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** +Opt('MustDeclareVars', 1) +#Region ;************ Includes ************ +#Include +#include +#include +#EndRegion ;************ Includes ************ +; ########################################################################################################################## +; ########################################################################################################################## +; # backupexecPS.exe --> Tool for Check BackupJobs in Zabbix # +; # 2014 - 2016 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_PS_Jobs # +; # # +; # ________ .__ __. __ __ .__ __. _______ .___________. # +; # | / | \ | | | | | | | \ | | | ____|| | # +; # `---/ / | \| | | | | | | \| | | |__ `---| |----` # +; # / / | . ` | | | | | | . ` | | __| | | # +; # / /----.| |\ | | | | `----.__| |\ | | |____ | | # +; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| # +; # # +; ########################################################################################################################## +; ########################################################################################################################## + +; find the 'BEMCLI.exe' - take a look at Registry of Host +Dim $SoftwareBasePaths[9] = ["HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _ + "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _ + "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _ + "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _ + "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _ + "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _ + "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0", _ + "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0", _ + "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0"] +Global $bemcli +Dim $aparameter[4] + $aparameter[0] = "Get-BEJob -JobType Backup,Duplicate -Status Scheduled,Active,Linked | select-object -property *" ; get a List of scheduled and active jobs + $aparameter[1] = "Get-BEJob -JobType Duplicate -Status Linked | select-object -property *" ; get a list of Duplicate Jobs + $aparameter[2] = '-o21 -e -j"Name of Job"' ; get last Exit-Code of a specific job by Name + $aparameter[3] = 'Get-BEJob -Id {ID of Job} | Get-BEJobHistory -FromLastJobRun | select-object -property *' ; get last Exit-Code of a specific job by ID + +Dim $stemp +Dim $atemp +Dim $aatemp +Dim $aDateTemp +Dim $aRuntimeTemp +Dim $aBackupJobs_byName[1] = [ 0 ] +Dim $aBackupJobs_byID[1] = [ 0 ] +Dim $aBackupJobs_Selection[1] = [ 0 ] + +Dim $s_JSONOutput +Dim $sRunCommand +Dim $sJobStatus +Dim $iJobStatus +Dim $iJobhowlongago +Dim $iJobBytes +Dim $iJobRuntime +Dim $iJobPercentComplete +Dim $iJobErrorCode + +; Für senden per Zabbix-Sender etc: +Global $sZabbix_agentd_exe +Global $sZabbix_agentd_conf +Global $sZabbix_sender_exe +Global $sZabbix_Hostname +Global $sZabbix_Server +Global $iZabbix_Server_Port +Global $sZabbix_String2Send +Global $s_JSONOutput +Global $bSendStatus = False + +Global $iStartTime +Global $iRunTime + +; Ok, we need the BEMCLI Extension for PowerShell, 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 +Global $sWow64 = "" +;~ If @AutoItX64 = 1 Then +;~ $sWow64 = "\Wow6432Node" +;~ EndIf + +$iStartTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc()) + +For $i = 1 To 100000 + $stemp = RegEnumVal("HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders", $i) +;~ $stemp = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE" & $sWow64 & "\Microsoft\Windows\CurrentVersion\Installer\Folders", $i) + If @error <> 0 Then + ConsoleWrite("Exitloop with Error-Code: " & @error & @CRLF) + ExitLoop + EndIf +;~ ConsoleWrite("Searching \Modules\BEMCLI\ in: " & $stemp & @CRLF) + ; 1234567890123456 + If StringRight($stemp, 16) = "\Modules\BEMCLI\" Then + $bemcli = "Import-Module '" & $stemp & "BEMCLI'" + ExitLoop + EndIf +Next + +If $bemcli = "" Then + ConsoleWriteError("Error, no installed BackupExec PowerShell found" & @CRLF) + Exit 1 +EndIf + +;~ ConsoleWrite("$bemcli = " & $bemcli & @CRLF) +;~ Exit 0 + +; ########################################################################################################################## +; ########################################################################################################################## +; ######################################## +; ######## ## ## ## ## ###### ######## #### ####### ## ## ###### ######################################## +; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ######################################## +; ## ## ## #### ## ## ## ## ## ## #### ## ## ######################################## +; ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ######################################## +; ## ## ## ## #### ## ## ## ## ## ## #### ## ######################################## +; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ######################################## +; ## ####### ## ## ###### ## #### ####### ## ## ###### ######################################## +; ######################################## +; ########################################################################################################################## +; ########################################################################################################################## +Func _BEMCLI($sbemparameter) + Local $sRunCommand + Local $outputBEMCLI + Local $errorsBEMCLI + Local $hBEMCLI + Local $iBEMCLImaxWaitTime = 20000 + Local $iBEMCLImaxWaitTimeSTART + Local $stdoutReadFEHLER + ; build the Command for run + $sRunCommand = $bemcli & " ; " & $sbemparameter + ; Start the timer for max wait time + $iBEMCLImaxWaitTimeSTART = TimerInit() + ; run the Command +;~ ConsoleWrite('powershell.exe Set-ExecutionPolicy Bypass ; "' & $sRunCommand & '"' & @CRLF) + $hBEMCLI = Run('powershell.exe Set-ExecutionPolicy Bypass ; "' & $sRunCommand & '"', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) + StdinWrite($hBEMCLI, @CRLF) + StdinWrite($hBEMCLI) + ;get the output + Do + ;Sleep(5) + ; get the output + $outputBEMCLI = $outputBEMCLI & StdoutRead($hBEMCLI) + ; get the errors + $errorsBEMCLI = $errorsBEMCLI & StderrRead($hBEMCLI) + ; did we have an error while reading? + $stdoutReadFEHLER = @error + If $stdoutReadFEHLER <> "" Then + ; No error, go on + If $outputBEMCLI = "" Then + ; but also no output, let us take a 2. try + $outputBEMCLI = $outputBEMCLI & StdoutRead($hBEMCLI) + If $outputBEMCLI = "" Then + ; anymore no output, oh oh + If $stdoutReadFEHLER <> "" Then + ; but we have an error message + Return $errorsBEMCLI + EndIf + EndIf + EndIf + EndIf + Until $stdoutReadFEHLER Or TimerDiff($iBEMCLImaxWaitTimeSTART) > $iBEMCLImaxWaitTime + ;MsgBox(0,"",$outputBEMCLI) + Return $outputBEMCLI +EndFunc ;<== End _BEMCLI() + +; ################################################################################### +; _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] +EndFunc ;==>_ANSI2OEM + +; ################################################################################################################## +; ######## ### ######## ######## #### ## ## ###### ####### ## ## ######## +; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## +; ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## +; ## ## ## ######## ######## ## ### ## ## ## ## ## ## ###### +; ## ######### ## ## ## ## ## ## ## ## ## ## ## #### ## +; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## +; ####### ######## ## ## ######## ######## #### ## ## ####### ###### ####### ## ## ## +; ################################################################################################################## +Func _Zabbix_conf() + Dim $sRegTMP + Dim $iRegTMP = 0 + Dim $iLoop + Dim $aRegTMP + Dim $aZabbix_config + Dim $sZabbix_config_file + Dim $a2temp + While 1 + $iRegTMP = $iRegTMP + 1 + $sRegTMP = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services", $iRegTMP) + If @error Then + ExitLoop + EndIf + $sRegTMP = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\" & $sRegTMP, "ImagePath") + If @error = 0 Then + If StringInStr($sRegTMP, "zabbix_agentd.exe") > 0 Then + ;ConsoleWrite("Gefunden: " & $sRegTMP & @CRLF) + $aRegTMP = StringSplit($sRegTMP, '"') + ;_ArrayDisplay($aRegTMP) + $sZabbix_agentd_exe = $aRegTMP[2] + $sZabbix_sender_exe = StringReplace($sZabbix_agentd_exe, "zabbix_agentd.exe", "zabbix_sender.exe") + $sZabbix_config_file = $aRegTMP[4] + $sZabbix_agentd_conf = $sZabbix_config_file + $aZabbix_config = FileReadToArray($sZabbix_config_file) + If @error = 0 Then + For $iLoop = 0 To (UBound($aZabbix_config) -1) + If StringLeft($aZabbix_config[$iLoop], StringLen("ServerActive=")) = "ServerActive=" Then + $sZabbix_Server = StringReplace($aZabbix_config[$iLoop], "ServerActive=", "") + $sZabbix_Server = StringReplace($sZabbix_Server, " ", "") + $a2temp = StringSplit($sZabbix_Server, ":") + If $a2temp[0] = 1 Then + $iZabbix_Server_Port = 10051 + Else + $sZabbix_Server = $a2temp[1] + $iZabbix_Server_Port = $a2temp[2] + EndIf + EndIf + If StringLeft($aZabbix_config[$iLoop], StringLen("Hostname=")) = "Hostname=" Then + $sZabbix_Hostname = StringReplace($aZabbix_config[$iLoop], "Hostname=", "") + $sZabbix_Hostname = StringReplace($sZabbix_Hostname, " ", "") + EndIf + Next + Else + ConsoleWrite("File not found: " & $sZabbix_config_file & @CRLF) + Exit 1 + EndIf + If FileExists($sZabbix_sender_exe) = 0 Then + ConsoleWrite("zabbix_sender.exe not found at: " & $sZabbix_sender_exe & @CRLF) + Exit 1 + EndIf + EndIf + EndIf + WEnd +;~ ConsoleWrite("zabbix_agentd.exe: " & '"' & $sZabbix_agentd_exe & '"' & @CRLF) +;~ ConsoleWrite("zabbix_sender.exe: " & '"' & $sZabbix_sender_exe & '"' & @CRLF) +;~ ConsoleWrite("Hostname used in Zabbix: " & '"' & $sZabbix_Hostname & '"' & @CRLF) +;~ ConsoleWrite("IP(:Port) Zabbix Server: " & '"' & $sZabbix_Server & '"' & @CRLF) +EndFunc + +; ################################################################################################################################################################################################################### +; ###### ######## ## ## ######## ## ###### ####### ## ## ####### ######## ### ######## ######## #### ## ## ###### ######## ######## ## ## ######## ######## +; ## ## ## ### ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +; ## ## #### ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +; ###### ###### ## ## ## ## ## ## ###### ## ## ## ## ## ####### ## ## ## ######## ######## ## ### ###### ###### ######## ## ## ###### ######## +; ## ## ## #### ## ## ## ## ## ## ## ## #### ## ## ######### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +; ####### ###### ######## ## ## ######## ###### ###### ####### ## ## ######### ######## ## ## ######## ######## #### ## ## ###### ######## ## ## ### ######## ## ## +; ################################################################################################################################################################################################################### +Func _SendJSON2ZabbixServer() + Local $ConnectedSocket, $iTCPBytesSend + ; Delete the last , + $sZabbix_String2Send = StringTrimRight($sZabbix_String2Send, StringLen("," & "@CRLF")) & '@CRLF' + ; finalize the String for a perfect JSON + $sZabbix_String2Send = $sZabbix_String2Send & ']}' & '@CRLF' + $sZabbix_String2Send = StringReplace($sZabbix_String2Send, '@CRLF', @CRLF) + ConsoleWrite(@CRLF) + ConsoleWrite("Complete JSON-String for sending:" & "---------------------------------" & @CRLF) + ConsoleWrite($sZabbix_String2Send & @CRLF & @CRLF) + ConsoleWrite("Using Zabbix_Agentd.conf File : " & $sZabbix_agentd_conf & @CRLF) + ConsoleWrite("Zabbix Server : " & $sZabbix_Server & @CRLF) + ConsoleWrite("Zabbix Server Port : " & $iZabbix_Server_Port & @CRLF & @CRLF) + ConsoleWrite("Number of bytes are being sent to the server : " & StringLen($sZabbix_String2Send) & @CRLF) + TCPStartup() + $ConnectedSocket = -1 + ConsoleWrite("Connecting Server ... ") + $ConnectedSocket = TCPConnect($sZabbix_Server, $iZabbix_Server_Port) + If @error Then + ConsoleWrite("ERROR: " & @error & @CRLF) + Else + ConsoleWrite("done" & @CRLF) + EndIf + ; "{""request"":""agent data"",""data"":[{""host"":""Servername"",""key"":""log"",""value"" :""hallo!!!""}]}" + ConsoleWrite("Sending Data ... ") + $iTCPBytesSend = TCPSend($ConnectedSocket, StringToBinary($sZabbix_String2Send, 4)) + $stemp = TCPRecv($ConnectedSocket, 1024) + If @error Then + ConsoleWrite("ERROR: " & @error & @CRLF) + Else + ConsoleWrite("done" & @CRLF) + EndIf + ConsoleWrite("Response from the Server: " & BinaryToString($stemp) & @CRLF & @CRLF) + ConsoleWrite(@CRLF) + ConsoleWrite("Number of bytes have been successfully sent : " & $iTCPBytesSend & @CRLF) + ConsoleWrite("Disconnect Server ... ") + TCPCloseSocket($ConnectedSocket) + If @error Then + ConsoleWrite("ERROR: " & @error & @CRLF) + Else + ConsoleWrite("done" & @CRLF & "--------------------------------------------------------------" & @CRLF & @CRLF) + EndIf + TCPShutdown() +EndFunc + +; ############################################################################################################################################################################################################################################################# +; ###### ######## ## ## ######## ######## #### ## ######## ## ## #### ######## ## ## ######## ### ######## ######## #### ## ## ###### ######## ## ## ######## ######## ######## +; ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## +; ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## +; ###### ###### ## ## ## ## ## ###### ## ## ###### ## ## ## ## ## ######### ## ## ## ######## ######## ## ### ###### ###### ## ## ## ## ## ###### ######## +; ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## +; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## +; ####### ###### ######## ## ## ######## ## #### ######## ######## ####### ### ### #### ## ## ## ####### ######## ## ## ######## ######## #### ## ## ####### ###### ######## ## ## ######## ######## ## ## +; ############################################################################################################################################################################################################################################################# +Func _SendFile_with_Zabbix_Sender($sFileForZabbixSender) + FileDelete($sFileForZabbixSender) + FileWriteLine($sFileForZabbixSender, $s_JSONOutput) + ConsoleWrite(@CRLF) + ConsoleWrite("Complete JSON-String for sending:" & "---------------------------------" & @CRLF) + ConsoleWrite($s_JSONOutput & @CRLF & @CRLF) + ConsoleWrite("Using Zabbix_Sender.exe : " & $sZabbix_sender_exe & @CRLF) + ConsoleWrite("Using Zabbix_Agentd.conf File : " & $sZabbix_agentd_conf & @CRLF) + ConsoleWrite("Using Temp-Directory : " & @TempDir & @CRLF) + ConsoleWrite("File to Send : : " & $sFileForZabbixSender & @CRLF) + ConsoleWrite("Hostname in Zabbix : " & $sZabbix_Hostname & @CRLF) + ConsoleWrite("Zabbix Server : " & $sZabbix_Server & @CRLF) + ConsoleWrite("Zabbix Server Port : " & $iZabbix_Server_Port & @CRLF) + ConsoleWrite("Complete Run-Command : " & '"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -i " & '"' & $sFileForZabbixSender & '"' & @CRLF) + ConsoleWrite("Output from Zabbix_Sender.exe : " & @CRLF) + ConsoleWrite("-------------------------------" & @CRLF) + RunWait('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -i " & '"' & $sFileForZabbixSender & '"', "", @SW_HIDE, $STDOUT_CHILD) + ;Sleep(1000) + ConsoleWrite(@CRLF) +EndFunc + +; ############################################################################################################################################################################################################################################################################# +; ###### ######## ## ## ######## ## ## ### ## ## ## ######## ## ## #### ######## ## ## ######## ### ######## ######## #### ## ## ###### ######## ## ## ######## ######## ######## +; ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## +; ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## +; ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## ###### ## ## ## ## ## ######### ## ## ## ######## ######## ## ### ###### ###### ## ## ## ## ## ###### ######## +; ## ## ## #### ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## +; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## +; ####### ###### ######## ## ## ######## ### ## ## ######## ####### ######## ####### ### ### #### ## ## ## ####### ######## ## ## ######## ######## #### ## ## ####### ###### ######## ## ## ######## ######## ## ## +; ############################################################################################################################################################################################################################################################################# + +Func _SendValue_with_Zabbix_Sender($sItemName, $sItemValue) + ; ConsoleWrite('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"' & @CRLF) + RunWait('"' & $sZabbix_sender_exe & '"' & " -z " & '"' & $sZabbix_Server & '" -s "' & $sZabbix_Hostname & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"', "", @SW_HIDE, $STDOUT_CHILD) +EndFunc + + +; ########################################################################################################################## +; ########################################################################################################################## +; #################################################################################### +; ## ## ### #### ## ## #################################################################################### +; ### ### ## ## ## ### ## #################################################################################### +; #### #### ## ## ## #### ## #################################################################################### +; ## ### ## ## ## ## ## ## ## #################################################################################### +; ## ## ######### ## ## #### #################################################################################### +; ## ## ## ## ## ## ### #################################################################################### +; ## ## ## ## #### ## ## #################################################################################### +; #################################################################################### +; ########################################################################################################################## +; ########################################################################################################################## + +If StringInStr($CmdLineRaw, "discoverjobs") > 0 Then + Dim $s_JSONOutput + ; Get all scheduled and active Jobs + $stemp = _BEMCLI($aparameter[0]) + + $atemp = StringSplit($stemp, @CRLF) + + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("Id")) = "Id" Then + $aatemp = StringSplit($atemp[$i],' : ', 1) + _ArrayAdd($aBackupJobs_byID, $aatemp[$aatemp[0]]) + $aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1 + EndIf + If StringLeft($atemp[$i],StringLen("Name")) = "Name" Then + $aatemp = StringSplit($atemp[$i],' : ', 1) + _ArrayAdd($aBackupJobs_byName, $aatemp[$aatemp[0]]) + $aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1 + EndIf + If StringLeft($atemp[$i],StringLen("SelectionSummary")) = "SelectionSummary" Then + $aatemp = StringSplit($atemp[$i],' : ', 1) + _ArrayAdd($aBackupJobs_Selection, $aatemp[$aatemp[0]]) + $aBackupJobs_Selection[0] = $aBackupJobs_Selection[0] + 1 + EndIf + Next + $s_JSONOutput = '{"data":[' + For $i = 1 To $aBackupJobs_byName[0] + $atemp = StringSplit($aBackupJobs_byName[$i],"") + $stemp = "" + For $j = 1 To $atemp[0] + Switch Asc($atemp[$j]) + Case 132 + $atemp[$j] = "ae" + Case 148 + $atemp[$j] = "oe" + Case 129 + $atemp[$j] = "ue" + Case 225 + $atemp[$j] = "ss" + Case Else + ;nichts + EndSwitch + $stemp = $stemp & $atemp[$j] + Next + $aBackupJobs_byName[$i] = $stemp + $s_JSONOutput = $s_JSONOutput & @CRLF + $s_JSONOutput = $s_JSONOutput & " " & '{' & @CRLF + $s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECJOB}":"' & $aBackupJobs_byName[$i] & '",' & @CRLF + $s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECID}":"' & $aBackupJobs_byID[$i] & '",' & @CRLF + ;$s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECSELECTION}":"' & $aBackupJobs_Selection[$i] & '"' & @CRLF + $s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECSELECTION}":"' & "---" & '"' & @CRLF + $s_JSONOutput = $s_JSONOutput & " " & '},' + Next + $s_JSONOutput = StringTrimRight($s_JSONOutput, 1) & @CRLF & ']}' + ConsoleWrite($s_JSONOutput & @CRLF) +EndIf + +If $CmdLine[0] = 2 Then + + If $CmdLine[1] = "doit" Then + _Zabbix_conf() + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("JobStatus")) = "JobStatus" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $sJobStatus = $aatemp[$aatemp[0]] +;~ ConsoleWrite($sJobStatus & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobstatus," & $CmdLine[2] & "]", $sJobStatus) + EndIf + + If StringLeft($atemp[$i],StringLen("StartTime")) = "StartTime" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $aDateTemp = StringSplit($stemp, " .") + ; [1] = Tag + ; [2] = Monat + ; [3] = Jahr + ; [4] = Uhrzeit als hh:mm:ss + $iJobhowlongago = _DateDiff("s", $aDateTemp[3] & "/" & $aDateTemp[2] & "/" & $aDateTemp[1] & " " & $aDateTemp[4], @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC) +;~ ConsoleWrite($iJobhowlongago & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobhowlongago," & $CmdLine[2] & "]", $iJobhowlongago) + EndIf + + If StringLeft($atemp[$i],StringLen("TotalDataSizeBytes")) = "TotalDataSizeBytes" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $iJobBytes = Int($stemp) +;~ ConsoleWrite($iJobBytes & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobbytes," & $CmdLine[2] & "]", $iJobBytes) + EndIf + + If StringLeft($atemp[$i],StringLen("ElapsedTime")) = "ElapsedTime" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $aRuntimeTemp = StringSplit($stemp,":") + ; [1] = Stunden + ; [2] = Minuten + ; [3] = Sekunden + $iJobRuntime = Int($aRuntimeTemp[3]) + (Int($aRuntimeTemp[2]) * 60) + (Int($aRuntimeTemp[1]) * 3600) +;~ ConsoleWrite($iJobRuntime & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobruntime," & $CmdLine[2] & "]", $iJobRuntime) + EndIf + + If StringLeft($atemp[$i],StringLen("PercentComplete")) = "PercentComplete" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobPercentComplete = $aatemp[$aatemp[0]] + If $iJobPercentComplete = -1 Then + $iJobPercentComplete = 0 + EndIf +;~ ConsoleWrite($iJobPercentComplete & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobPercentComplete," & $CmdLine[2] & "]", $iJobPercentComplete) + EndIf + + If StringLeft($atemp[$i],StringLen("ErrorCode")) = "ErrorCode" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobErrorCode = $aatemp[$aatemp[0]] +;~ ConsoleWrite($iJobErrorCode & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobErrorCode," & $CmdLine[2] & "]", $iJobErrorCode) + EndIf + + If StringLeft($atemp[$i],StringLen("ErrorCategory")) = "ErrorCategory" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobErrorCode = $aatemp[$aatemp[0]] +;~ ConsoleWrite($iJobErrorCode & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobErrorCategory," & $CmdLine[2] & "]", $iJobErrorCode) + EndIf + + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + $iRunTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc()) - $iStartTime + ConsoleWrite($iRunTime & @CRLF) + Exit 0 + EndIf + +; ######################################################################################################################################################################### + + If $CmdLine[1] = "jobstatus" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("JobStatus")) = "JobStatus" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $sJobStatus = $aatemp[$aatemp[0]] + ConsoleWrite($sJobStatus & @CRLF) + Exit 0 + EndIf + + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobhowlongago" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("StartTime")) = "StartTime" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $aDateTemp = StringSplit($stemp, " .") + ; [1] = Tag + ; [2] = Monat + ; [3] = Jahr + ; [4] = Uhrzeit als hh:mm:ss + $iJobhowlongago = _DateDiff("s", $aDateTemp[3] & "/" & $aDateTemp[2] & "/" & $aDateTemp[1] & " " & $aDateTemp[4], @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC) + ConsoleWrite($iJobhowlongago & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobbytes" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("TotalDataSizeBytes")) = "TotalDataSizeBytes" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $iJobBytes = Int($stemp) + ConsoleWrite($iJobBytes & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobruntime" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("ElapsedTime")) = "ElapsedTime" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $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], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobPercentComplete" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("PercentComplete")) = "PercentComplete" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobPercentComplete = $aatemp[$aatemp[0]] + If $iJobPercentComplete = -1 Then + $iJobPercentComplete = 0 + EndIf + ConsoleWrite($iJobPercentComplete & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobErrorCode" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("ErrorCode")) = "ErrorCode" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobErrorCode = $aatemp[$aatemp[0]] + ConsoleWrite($iJobErrorCode & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobErrorCategory" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("ErrorCategory")) = "ErrorCategory" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobErrorCode = $aatemp[$aatemp[0]] + ConsoleWrite($iJobErrorCode & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + +EndIf + +Exit 0 \ No newline at end of file diff --git a/BackupExecPS.exe b/BackupExecPS.exe new file mode 100644 index 0000000..7740e12 Binary files /dev/null and b/BackupExecPS.exe differ diff --git a/BackupExecPS_V2.au3 b/BackupExecPS_V2.au3 new file mode 100644 index 0000000..bad122d --- /dev/null +++ b/BackupExecPS_V2.au3 @@ -0,0 +1,667 @@ +#NoTrayIcon +#Region ;**** Directives created by AutoIt3Wrapper_GUI **** +#AutoIt3Wrapper_Icon=Icon256-32.ico +#AutoIt3Wrapper_Outfile=BackupExecPS.exe +#AutoIt3Wrapper_Outfile_x64=BackupExecPS64.exe +#AutoIt3Wrapper_Compile_Both=y +#AutoIt3Wrapper_UseX64=y +#AutoIt3Wrapper_Change2CUI=y +#AutoIt3Wrapper_Res_Description=Zabbix BackupExec Job Monitoring +#AutoIt3Wrapper_Res_Fileversion=1.0.0.8 +#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y +#AutoIt3Wrapper_Res_LegalCopyright=2016 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_PS_Jobs +#AutoIt3Wrapper_Res_Field=See You|znil.net +#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** +Opt('MustDeclareVars', 1) +#Region ;************ Includes ************ +#Include +#include +#include +#EndRegion ;************ Includes ************ +; ########################################################################################################################## +; ########################################################################################################################## +; # backupexecPS.exe --> Tool for Check BackupJobs in Zabbix # +; # 2014 - 2016 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_PS_Jobs # +; # # +; # ________ .__ __. __ __ .__ __. _______ .___________. # +; # | / | \ | | | | | | | \ | | | ____|| | # +; # `---/ / | \| | | | | | | \| | | |__ `---| |----` # +; # / / | . ` | | | | | | . ` | | __| | | # +; # / /----.| |\ | | | | `----.__| |\ | | |____ | | # +; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| # +; # # +; ########################################################################################################################## +; ########################################################################################################################## + +; find the 'BEMCLI.exe' - take a look at Registry of Host +Dim $SoftwareBasePaths[9] = ["HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _ + "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _ + "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _ + "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _ + "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _ + "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _ + "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0", _ + "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0", _ + "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0"] +Global $bemcli +Dim $aparameter[4] + $aparameter[0] = "Get-BEJob -JobType Backup,Duplicate -Status Scheduled,Active,Linked | select-object -property *" ; get a List of scheduled and active jobs + $aparameter[1] = "Get-BEJob -JobType Duplicate -Status Linked | select-object -property *" ; get a list of Duplicate Jobs + $aparameter[2] = '-o21 -e -j"Name of Job"' ; get last Exit-Code of a specific job by Name + $aparameter[3] = 'Get-BEJob -Id {ID of Job} | Get-BEJobHistory -FromLastJobRun | select-object -property *' ; get last Exit-Code of a specific job by ID + +Dim $stemp +Dim $atemp +Dim $aatemp +Dim $aDateTemp +Dim $aRuntimeTemp +Dim $aBackupJobs_byName[1] = [ 0 ] +Dim $aBackupJobs_byID[1] = [ 0 ] +Dim $aBackupJobs_Selection[1] = [ 0 ] + +Dim $s_JSONOutput +Dim $sRunCommand +Dim $sJobStatus +Dim $iJobStatus +Dim $iJobhowlongago +Dim $iJobBytes +Dim $iJobRuntime +Dim $iJobPercentComplete +Dim $iJobErrorCode + +; Für senden per Zabbix-Sender etc: +Global $sZabbix_agentd_exe +Global $sZabbix_agentd_conf +Global $sZabbix_sender_exe +Global $sZabbix_Hostname +Global $sZabbix_Server +Global $iZabbix_Server_Port +Global $sZabbix_String2Send +Global $s_JSONOutput +Global $bSendStatus = False + +Global $iStartTime +Global $iRunTime + +; Ok, we need the BEMCLI Extension for PowerShell, 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 +Global $sWow64 = "" +;~ If @AutoItX64 = 1 Then +;~ $sWow64 = "\Wow6432Node" +;~ EndIf + +$iStartTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc()) + +For $i = 1 To 100000 + $stemp = RegEnumVal("HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders", $i) +;~ $stemp = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE" & $sWow64 & "\Microsoft\Windows\CurrentVersion\Installer\Folders", $i) + If @error <> 0 Then + ConsoleWrite("Exitloop with Error-Code: " & @error & @CRLF) + ExitLoop + EndIf +;~ ConsoleWrite("Searching \Modules\BEMCLI\ in: " & $stemp & @CRLF) + ; 1234567890123456 + If StringRight($stemp, 16) = "\Modules\BEMCLI\" Then + $bemcli = "Import-Module '" & $stemp & "BEMCLI'" + ExitLoop + EndIf +Next + +If $bemcli = "" Then + ConsoleWriteError("Error, no installed BackupExec PowerShell found" & @CRLF) + Exit 1 +EndIf + +;~ ConsoleWrite("$bemcli = " & $bemcli & @CRLF) +;~ Exit 0 + +; ########################################################################################################################## +; ########################################################################################################################## +; ######################################## +; ######## ## ## ## ## ###### ######## #### ####### ## ## ###### ######################################## +; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ######################################## +; ## ## ## #### ## ## ## ## ## ## #### ## ## ######################################## +; ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ######################################## +; ## ## ## ## #### ## ## ## ## ## ## #### ## ######################################## +; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ######################################## +; ## ####### ## ## ###### ## #### ####### ## ## ###### ######################################## +; ######################################## +; ########################################################################################################################## +; ########################################################################################################################## +Func _BEMCLI($sbemparameter) + Local $sRunCommand + Local $outputBEMCLI + Local $errorsBEMCLI + Local $hBEMCLI + Local $iBEMCLImaxWaitTime = 20000 + Local $iBEMCLImaxWaitTimeSTART + Local $stdoutReadFEHLER + ; build the Command for run + $sRunCommand = $bemcli & " ; " & $sbemparameter + ; Start the timer for max wait time + $iBEMCLImaxWaitTimeSTART = TimerInit() + ; run the Command +;~ ConsoleWrite('powershell.exe Set-ExecutionPolicy Bypass ; "' & $sRunCommand & '"' & @CRLF) + $hBEMCLI = Run('powershell.exe Set-ExecutionPolicy Bypass ; "' & $sRunCommand & '"', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) + StdinWrite($hBEMCLI, @CRLF) + StdinWrite($hBEMCLI) + ;get the output + Do + ;Sleep(5) + ; get the output + $outputBEMCLI = $outputBEMCLI & StdoutRead($hBEMCLI) + ; get the errors + $errorsBEMCLI = $errorsBEMCLI & StderrRead($hBEMCLI) + ; did we have an error while reading? + $stdoutReadFEHLER = @error + If $stdoutReadFEHLER <> "" Then + ; No error, go on + If $outputBEMCLI = "" Then + ; but also no output, let us take a 2. try + $outputBEMCLI = $outputBEMCLI & StdoutRead($hBEMCLI) + If $outputBEMCLI = "" Then + ; anymore no output, oh oh + If $stdoutReadFEHLER <> "" Then + ; but we have an error message + Return $errorsBEMCLI + EndIf + EndIf + EndIf + EndIf + Until $stdoutReadFEHLER Or TimerDiff($iBEMCLImaxWaitTimeSTART) > $iBEMCLImaxWaitTime + ;MsgBox(0,"",$outputBEMCLI) + Return $outputBEMCLI +EndFunc ;<== End _BEMCLI() + +; ################################################################################### +; _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] +EndFunc ;==>_ANSI2OEM + +; ################################################################################################################## +; ######## ### ######## ######## #### ## ## ###### ####### ## ## ######## +; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## +; ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## +; ## ## ## ######## ######## ## ### ## ## ## ## ## ## ###### +; ## ######### ## ## ## ## ## ## ## ## ## ## ## #### ## +; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## +; ####### ######## ## ## ######## ######## #### ## ## ####### ###### ####### ## ## ## +; ################################################################################################################## +Func _Zabbix_conf() + Dim $sRegTMP + Dim $iRegTMP = 0 + Dim $iLoop + Dim $aRegTMP + Dim $aZabbix_config + Dim $sZabbix_config_file + Dim $a2temp + While 1 + $iRegTMP = $iRegTMP + 1 + $sRegTMP = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services", $iRegTMP) + If @error Then + ExitLoop + EndIf + $sRegTMP = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\" & $sRegTMP, "ImagePath") + If @error = 0 Then + If StringInStr($sRegTMP, "zabbix_agentd.exe") > 0 Then + ;ConsoleWrite("Gefunden: " & $sRegTMP & @CRLF) + $aRegTMP = StringSplit($sRegTMP, '"') + ;_ArrayDisplay($aRegTMP) + $sZabbix_agentd_exe = $aRegTMP[2] + $sZabbix_sender_exe = StringReplace($sZabbix_agentd_exe, "zabbix_agentd.exe", "zabbix_sender.exe") + $sZabbix_config_file = $aRegTMP[4] + $sZabbix_agentd_conf = $sZabbix_config_file + $aZabbix_config = FileReadToArray($sZabbix_config_file) + If @error = 0 Then + For $iLoop = 0 To (UBound($aZabbix_config) -1) + If StringLeft($aZabbix_config[$iLoop], StringLen("ServerActive=")) = "ServerActive=" Then + $sZabbix_Server = StringReplace($aZabbix_config[$iLoop], "ServerActive=", "") + $sZabbix_Server = StringReplace($sZabbix_Server, " ", "") + $a2temp = StringSplit($sZabbix_Server, ":") + If $a2temp[0] = 1 Then + $iZabbix_Server_Port = 10051 + Else + $sZabbix_Server = $a2temp[1] + $iZabbix_Server_Port = $a2temp[2] + EndIf + EndIf + If StringLeft($aZabbix_config[$iLoop], StringLen("Hostname=")) = "Hostname=" Then + $sZabbix_Hostname = StringReplace($aZabbix_config[$iLoop], "Hostname=", "") + $sZabbix_Hostname = StringReplace($sZabbix_Hostname, " ", "") + EndIf + Next + Else + ConsoleWrite("File not found: " & $sZabbix_config_file & @CRLF) + Exit 1 + EndIf + If FileExists($sZabbix_sender_exe) = 0 Then + ConsoleWrite("zabbix_sender.exe not found at: " & $sZabbix_sender_exe & @CRLF) + Exit 1 + EndIf + EndIf + EndIf + WEnd +;~ ConsoleWrite("zabbix_agentd.exe: " & '"' & $sZabbix_agentd_exe & '"' & @CRLF) +;~ ConsoleWrite("zabbix_sender.exe: " & '"' & $sZabbix_sender_exe & '"' & @CRLF) +;~ ConsoleWrite("Hostname used in Zabbix: " & '"' & $sZabbix_Hostname & '"' & @CRLF) +;~ ConsoleWrite("IP(:Port) Zabbix Server: " & '"' & $sZabbix_Server & '"' & @CRLF) +EndFunc + +; ################################################################################################################################################################################################################### +; ###### ######## ## ## ######## ## ###### ####### ## ## ####### ######## ### ######## ######## #### ## ## ###### ######## ######## ## ## ######## ######## +; ## ## ## ### ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +; ## ## #### ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +; ###### ###### ## ## ## ## ## ## ###### ## ## ## ## ## ####### ## ## ## ######## ######## ## ### ###### ###### ######## ## ## ###### ######## +; ## ## ## #### ## ## ## ## ## ## ## ## #### ## ## ######### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +; ####### ###### ######## ## ## ######## ###### ###### ####### ## ## ######### ######## ## ## ######## ######## #### ## ## ###### ######## ## ## ### ######## ## ## +; ################################################################################################################################################################################################################### +Func _SendJSON2ZabbixServer() + Local $ConnectedSocket, $iTCPBytesSend + ; Delete the last , + $sZabbix_String2Send = StringTrimRight($sZabbix_String2Send, StringLen("," & "@CRLF")) & '@CRLF' + ; finalize the String for a perfect JSON + $sZabbix_String2Send = $sZabbix_String2Send & ']}' & '@CRLF' + $sZabbix_String2Send = StringReplace($sZabbix_String2Send, '@CRLF', @CRLF) + ConsoleWrite(@CRLF) + ConsoleWrite("Complete JSON-String for sending:" & "---------------------------------" & @CRLF) + ConsoleWrite($sZabbix_String2Send & @CRLF & @CRLF) + ConsoleWrite("Using Zabbix_Agentd.conf File : " & $sZabbix_agentd_conf & @CRLF) + ConsoleWrite("Zabbix Server : " & $sZabbix_Server & @CRLF) + ConsoleWrite("Zabbix Server Port : " & $iZabbix_Server_Port & @CRLF & @CRLF) + ConsoleWrite("Number of bytes are being sent to the server : " & StringLen($sZabbix_String2Send) & @CRLF) + TCPStartup() + $ConnectedSocket = -1 + ConsoleWrite("Connecting Server ... ") + $ConnectedSocket = TCPConnect($sZabbix_Server, $iZabbix_Server_Port) + If @error Then + ConsoleWrite("ERROR: " & @error & @CRLF) + Else + ConsoleWrite("done" & @CRLF) + EndIf + ; "{""request"":""agent data"",""data"":[{""host"":""Servername"",""key"":""log"",""value"" :""hallo!!!""}]}" + ConsoleWrite("Sending Data ... ") + $iTCPBytesSend = TCPSend($ConnectedSocket, StringToBinary($sZabbix_String2Send, 4)) + $stemp = TCPRecv($ConnectedSocket, 1024) + If @error Then + ConsoleWrite("ERROR: " & @error & @CRLF) + Else + ConsoleWrite("done" & @CRLF) + EndIf + ConsoleWrite("Response from the Server: " & BinaryToString($stemp) & @CRLF & @CRLF) + ConsoleWrite(@CRLF) + ConsoleWrite("Number of bytes have been successfully sent : " & $iTCPBytesSend & @CRLF) + ConsoleWrite("Disconnect Server ... ") + TCPCloseSocket($ConnectedSocket) + If @error Then + ConsoleWrite("ERROR: " & @error & @CRLF) + Else + ConsoleWrite("done" & @CRLF & "--------------------------------------------------------------" & @CRLF & @CRLF) + EndIf + TCPShutdown() +EndFunc + +; ############################################################################################################################################################################################################################################################# +; ###### ######## ## ## ######## ######## #### ## ######## ## ## #### ######## ## ## ######## ### ######## ######## #### ## ## ###### ######## ## ## ######## ######## ######## +; ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## +; ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## +; ###### ###### ## ## ## ## ## ###### ## ## ###### ## ## ## ## ## ######### ## ## ## ######## ######## ## ### ###### ###### ## ## ## ## ## ###### ######## +; ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## +; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## +; ####### ###### ######## ## ## ######## ## #### ######## ######## ####### ### ### #### ## ## ## ####### ######## ## ## ######## ######## #### ## ## ####### ###### ######## ## ## ######## ######## ## ## +; ############################################################################################################################################################################################################################################################# +Func _SendFile_with_Zabbix_Sender($sFileForZabbixSender) + FileDelete($sFileForZabbixSender) + FileWriteLine($sFileForZabbixSender, $s_JSONOutput) +;~ ConsoleWrite(@CRLF) +;~ ConsoleWrite("Complete JSON-String for sending:" & "---------------------------------" & @CRLF) +;~ ConsoleWrite($s_JSONOutput & @CRLF & @CRLF) +;~ ConsoleWrite("Using Zabbix_Sender.exe : " & $sZabbix_sender_exe & @CRLF) +;~ ConsoleWrite("Using Zabbix_Agentd.conf File : " & $sZabbix_agentd_conf & @CRLF) +;~ ConsoleWrite("Using Temp-Directory : " & @TempDir & @CRLF) +;~ ConsoleWrite("File to Send : : " & $sFileForZabbixSender & @CRLF) +;~ ConsoleWrite("Hostname in Zabbix : " & $sZabbix_Hostname & @CRLF) +;~ ConsoleWrite("Zabbix Server : " & $sZabbix_Server & @CRLF) +;~ ConsoleWrite("Zabbix Server Port : " & $iZabbix_Server_Port & @CRLF) +;~ ConsoleWrite("Complete Run-Command : " & '"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -i " & '"' & $sFileForZabbixSender & '"' & @CRLF) +;~ ConsoleWrite("Output from Zabbix_Sender.exe : " & @CRLF) +;~ ConsoleWrite("-------------------------------" & @CRLF) + RunWait('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -i " & '"' & $sFileForZabbixSender & '"', "", @SW_HIDE, $STDOUT_CHILD) + ;Sleep(1000) +;~ ConsoleWrite(@CRLF) +EndFunc + +; ############################################################################################################################################################################################################################################################################# +; ###### ######## ## ## ######## ## ## ### ## ## ## ######## ## ## #### ######## ## ## ######## ### ######## ######## #### ## ## ###### ######## ## ## ######## ######## ######## +; ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## +; ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## +; ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## ###### ## ## ## ## ## ######### ## ## ## ######## ######## ## ### ###### ###### ## ## ## ## ## ###### ######## +; ## ## ## #### ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## +; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## +; ####### ###### ######## ## ## ######## ### ## ## ######## ####### ######## ####### ### ### #### ## ## ## ####### ######## ## ## ######## ######## #### ## ## ####### ###### ######## ## ## ######## ######## ## ## +; ############################################################################################################################################################################################################################################################################# + +Func _SendValue_with_Zabbix_Sender($sItemName, $sItemValue) + ; ConsoleWrite('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"' & @CRLF) + RunWait('"' & $sZabbix_sender_exe & '"' & " -z " & '"' & $sZabbix_Server & '" -s "' & $sZabbix_Hostname & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"', "", @SW_HIDE, $STDOUT_CHILD) +EndFunc + + +; ########################################################################################################################## +; ########################################################################################################################## +; #################################################################################### +; ## ## ### #### ## ## #################################################################################### +; ### ### ## ## ## ### ## #################################################################################### +; #### #### ## ## ## #### ## #################################################################################### +; ## ### ## ## ## ## ## ## ## #################################################################################### +; ## ## ######### ## ## #### #################################################################################### +; ## ## ## ## ## ## ### #################################################################################### +; ## ## ## ## #### ## ## #################################################################################### +; #################################################################################### +; ########################################################################################################################## +; ########################################################################################################################## + +If StringInStr($CmdLineRaw, "discoverjobs") > 0 Then + Dim $s_JSONOutput + ; Get all scheduled and active Jobs + $stemp = _BEMCLI($aparameter[0]) + + $atemp = StringSplit($stemp, @CRLF) + + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("Id")) = "Id" Then + $aatemp = StringSplit($atemp[$i],' : ', 1) + _ArrayAdd($aBackupJobs_byID, $aatemp[$aatemp[0]]) + $aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1 + EndIf + If StringLeft($atemp[$i],StringLen("Name")) = "Name" Then + $aatemp = StringSplit($atemp[$i],' : ', 1) + _ArrayAdd($aBackupJobs_byName, $aatemp[$aatemp[0]]) + $aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1 + EndIf + If StringLeft($atemp[$i],StringLen("SelectionSummary")) = "SelectionSummary" Then + $aatemp = StringSplit($atemp[$i],' : ', 1) + _ArrayAdd($aBackupJobs_Selection, $aatemp[$aatemp[0]]) + $aBackupJobs_Selection[0] = $aBackupJobs_Selection[0] + 1 + EndIf + Next + $s_JSONOutput = '- znil.BackupExecPS[trapperdiscoverjobs] {"data":[' +;~ $s_JSONOutput = '{"data":[' + For $i = 1 To $aBackupJobs_byName[0] + $atemp = StringSplit($aBackupJobs_byName[$i],"") + $stemp = "" + For $j = 1 To $atemp[0] + Switch Asc($atemp[$j]) + Case 132 + $atemp[$j] = "ae" + Case 148 + $atemp[$j] = "oe" + Case 129 + $atemp[$j] = "ue" + Case 225 + $atemp[$j] = "ss" + Case Else + ;nichts + EndSwitch + $stemp = $stemp & $atemp[$j] + Next + $aBackupJobs_byName[$i] = $stemp +;~ $s_JSONOutput = $s_JSONOutput & @CRLF +;~ $s_JSONOutput = $s_JSONOutput & " " & '{' & @CRLF +;~ $s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECJOB}":"' & $aBackupJobs_byName[$i] & '",' & @CRLF +;~ $s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECID}":"' & $aBackupJobs_byID[$i] & '",' & @CRLF +;~ ;$s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECSELECTION}":"' & $aBackupJobs_Selection[$i] & '"' & @CRLF +;~ $s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECSELECTION}":"' & "---" & '"' & @CRLF +;~ $s_JSONOutput = $s_JSONOutput & " " & '},' + $s_JSONOutput = $s_JSONOutput & '{' + $s_JSONOutput = $s_JSONOutput & '"{#BACKUPEXECJOB}":"' & $aBackupJobs_byName[$i] & '",' + $s_JSONOutput = $s_JSONOutput & '"{#BACKUPEXECID}":"' & $aBackupJobs_byID[$i] & '",' + $s_JSONOutput = $s_JSONOutput & '"{#BACKUPEXECSELECTION}":"' & "---" & '"' + $s_JSONOutput = $s_JSONOutput & '},' + + Next + $s_JSONOutput = StringTrimRight($s_JSONOutput, 1) & ']}' + +;~ ConsoleWrite(_ANSI2OEM($s_JSONOutput) & @CRLF) + _Zabbix_conf() + _SendFile_with_Zabbix_Sender(@TempDir & "\Zabbix-BackupExec-Jobs.txt") + $iRunTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc()) - $iStartTime + ConsoleWrite($iRunTime & @CRLF) + Exit 0 +EndIf + +If $CmdLine[0] = 2 Then + + If $CmdLine[1] = "doit" Then + _Zabbix_conf() + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("JobStatus")) = "JobStatus" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $sJobStatus = $aatemp[$aatemp[0]] +;~ ConsoleWrite($sJobStatus & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobstatus," & $CmdLine[2] & "]", $sJobStatus) + EndIf + + If StringLeft($atemp[$i],StringLen("StartTime")) = "StartTime" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $aDateTemp = StringSplit($stemp, " .") + ; [1] = Tag + ; [2] = Monat + ; [3] = Jahr + ; [4] = Uhrzeit als hh:mm:ss + $iJobhowlongago = _DateDiff("s", $aDateTemp[3] & "/" & $aDateTemp[2] & "/" & $aDateTemp[1] & " " & $aDateTemp[4], @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC) +;~ ConsoleWrite($iJobhowlongago & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobhowlongago," & $CmdLine[2] & "]", $iJobhowlongago) + EndIf + + If StringLeft($atemp[$i],StringLen("TotalDataSizeBytes")) = "TotalDataSizeBytes" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $iJobBytes = Int($stemp) +;~ ConsoleWrite($iJobBytes & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobbytes," & $CmdLine[2] & "]", $iJobBytes) + EndIf + + If StringLeft($atemp[$i],StringLen("ElapsedTime")) = "ElapsedTime" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $aRuntimeTemp = StringSplit($stemp,":") + ; [1] = Stunden + ; [2] = Minuten + ; [3] = Sekunden + $iJobRuntime = Int($aRuntimeTemp[3]) + (Int($aRuntimeTemp[2]) * 60) + (Int($aRuntimeTemp[1]) * 3600) +;~ ConsoleWrite($iJobRuntime & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobruntime," & $CmdLine[2] & "]", $iJobRuntime) + EndIf + + If StringLeft($atemp[$i],StringLen("PercentComplete")) = "PercentComplete" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobPercentComplete = $aatemp[$aatemp[0]] + If $iJobPercentComplete = -1 Then + $iJobPercentComplete = 0 + EndIf +;~ ConsoleWrite($iJobPercentComplete & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobPercentComplete," & $CmdLine[2] & "]", $iJobPercentComplete) + EndIf + + If StringLeft($atemp[$i],StringLen("ErrorCode")) = "ErrorCode" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobErrorCode = $aatemp[$aatemp[0]] +;~ ConsoleWrite($iJobErrorCode & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobErrorCode," & $CmdLine[2] & "]", $iJobErrorCode) + EndIf + + If StringLeft($atemp[$i],StringLen("ErrorCategory")) = "ErrorCategory" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobErrorCode = $aatemp[$aatemp[0]] +;~ ConsoleWrite($iJobErrorCode & @CRLF) + _SendValue_with_Zabbix_Sender("znil.BackupExecPS[jobErrorCategory," & $CmdLine[2] & "]", $iJobErrorCode) + EndIf + + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + $iRunTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc()) - $iStartTime + ConsoleWrite($iRunTime & @CRLF) + Exit 0 + EndIf + +; ######################################################################################################################################################################### + + If $CmdLine[1] = "jobstatus" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("JobStatus")) = "JobStatus" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $sJobStatus = $aatemp[$aatemp[0]] + ConsoleWrite($sJobStatus & @CRLF) + Exit 0 + EndIf + + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobhowlongago" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("StartTime")) = "StartTime" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $aDateTemp = StringSplit($stemp, " .") + ; [1] = Tag + ; [2] = Monat + ; [3] = Jahr + ; [4] = Uhrzeit als hh:mm:ss + $iJobhowlongago = _DateDiff("s", $aDateTemp[3] & "/" & $aDateTemp[2] & "/" & $aDateTemp[1] & " " & $aDateTemp[4], @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC) + ConsoleWrite($iJobhowlongago & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobbytes" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("TotalDataSizeBytes")) = "TotalDataSizeBytes" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $iJobBytes = Int($stemp) + ConsoleWrite($iJobBytes & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobruntime" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("ElapsedTime")) = "ElapsedTime" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $stemp = $aatemp[$aatemp[0]] + $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], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobPercentComplete" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("PercentComplete")) = "PercentComplete" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobPercentComplete = $aatemp[$aatemp[0]] + If $iJobPercentComplete = -1 Then + $iJobPercentComplete = 0 + EndIf + ConsoleWrite($iJobPercentComplete & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobErrorCode" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("ErrorCode")) = "ErrorCode" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobErrorCode = $aatemp[$aatemp[0]] + ConsoleWrite($iJobErrorCode & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + + If $CmdLine[1] = "jobErrorCategory" Then + $stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2])) + $atemp = StringSplit($stemp, @CRLF) + For $i = 1 To $atemp[0] + If StringLeft($atemp[$i],StringLen("ErrorCategory")) = "ErrorCategory" Then + $aatemp = StringSplit($atemp[$i],' : ',1) + $iJobErrorCode = $aatemp[$aatemp[0]] + ConsoleWrite($iJobErrorCode & @CRLF) + Exit 0 + EndIf + If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then + ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF) + Exit 0 + EndIf + Next + EndIf + +EndIf + +Exit 0 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29