626 lines
32 KiB
AutoIt
626 lines
32 KiB
AutoIt
#NoTrayIcon
|
||
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
|
||
#AutoIt3Wrapper_Icon=Icon256-32.ico
|
||
#AutoIt3Wrapper_UseUpx=y
|
||
#AutoIt3Wrapper_Change2CUI=y
|
||
#AutoIt3Wrapper_Res_Description=Zabbix Monitor scheduled Tasks
|
||
#AutoIt3Wrapper_Res_Fileversion=1.0.0.49
|
||
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
|
||
#AutoIt3Wrapper_Res_LegalCopyright=2015 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:TaskSchedulerMonitoring
|
||
#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 ************
|
||
; ##########################################################################################################################
|
||
; ##########################################################################################################################
|
||
; # TaskSchedulerMonitoring.exe --> Tool for Check BackupJobs in Zabbix #
|
||
; # 2013 Bernhard Linz / Bernhard@znil.de / http://znil.net #
|
||
; # #
|
||
; # Latest Version of this Program and Template in German: #
|
||
; # http://znil.net/index.php?title=Zabbix:TaskSchedulerMonitoring #
|
||
; # #
|
||
; # ________ .__ __. __ __ .__ __. _______ .___________. #
|
||
; # | / | \ | | | | | | | \ | | | ____|| | #
|
||
; # `---/ / | \| | | | | | | \| | | |__ `---| |----` #
|
||
; # / / | . ` | | | | | | . ` | | __| | | #
|
||
; # / /----.| |\ | | | | `----.__| |\ | | |____ | | #
|
||
; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| #
|
||
; # #
|
||
; ##########################################################################################################################
|
||
; ##########################################################################################################################
|
||
|
||
Global $s_schtasksexe
|
||
|
||
Global $s_temp1, $s_temp2
|
||
Global $a_temp1, $a_temp2
|
||
Global $a_DateTemp
|
||
Global $a_RuntimeTemp
|
||
|
||
Global $a_ScheduledTasks[1][8] ; [0][0] = Anzahl der Tasks
|
||
; [x][1] = Name des Task "original"
|
||
; [x][2] = Name des Tasks "bereinigt" - ohne Leerzeichen/Sonderzeichen zur Anzeige in Zabbix unr zur <20>bergabe an dieses Programm hier
|
||
; [x][3] = Last Result
|
||
; [x][4] = Last Run Time
|
||
; [x][5] = Next Run Time
|
||
; [x][6] = Run As User
|
||
; [x][7] = Task To Run
|
||
|
||
Global $s_Task2IgnoreFile = @ScriptDir & "\TaskSchedulerMonitoring-ignore.txt"
|
||
Global $h_Task2IgnoreFile
|
||
Global $a_Task2Ignore[1] = [ 0 ]
|
||
Global $b_IgnoreTask = False
|
||
|
||
Global $s_CleanTaskName
|
||
Global $s_OriginalTaskName
|
||
Global $s_QueryTaskName
|
||
Global $i_ThisTask
|
||
|
||
Global $s_JSONOutput
|
||
Global $s_RunCommand
|
||
|
||
Global $iStartTime
|
||
Global $iRunTime
|
||
|
||
Global $b_Verbose
|
||
|
||
; 10 20 30 40 50 60 70 80
|
||
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
||
Dim $s__Header = _
|
||
"+------------------------------------------------------------------------------" & @CRLF & _
|
||
"| TaskSchedulderMonitoring.exe - Version " & FileGetVersion(@ScriptName) & @CRLF & _
|
||
"+------------------------------------------------------------------------------" & @CRLF & _
|
||
"| 2015 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 die Aufgabenplanung / Geplante" & @CRLF & _
|
||
"Tasks zu <20>berwachen" & @CRLF & _
|
||
"---------------------------------------------------------------------------" & @CRLF & _
|
||
@CRLF & _
|
||
"Aufruf: " & @CRLF & _
|
||
@CRLF & _
|
||
@ScriptName & " <Option> <Parameter>" & @CRLF & _
|
||
@CRLF & _
|
||
"Optionen:" & @CRLF & _
|
||
"---------" & @CRLF & _
|
||
" /? oder -? : Diese Hilfe Anzeigen" & @CRLF & _
|
||
@CRLF & _
|
||
" discovertasks : Erzeugt eine Liste im JSON Format <20>ber alle Aufgaben." & @CRLF & _
|
||
" <20>bernommen werden nur alle Tasks die im Stammordner \ stehen," & @CRLF & _
|
||
" also direkt unterhalb von 'Aufgabenplanungsbibliothek' bzw." & @CRLF & _
|
||
" 'Task Scheduler Library'" & @CRLF & _
|
||
@CRLF & _
|
||
" query : Ben<65>tigt als Parameter den Namen des geplanten Task." & @CRLF & _
|
||
" Sendet das Ergebnis direkt an den Zabbix-Server bzw. Proxy" & @CRLF & _
|
||
" <20>ber die Zabbix_Sender.exe. Es wird die Konfiguration des" & @CRLF & _
|
||
" installierten Zabbix Agenten ausgelesen und der dort" & @CRLF & _
|
||
" hinterlegte Server als Ziel genommen. Die Zabbix_Sender.exe" & @CRLF & _
|
||
" muss im gleichen Pfad liegen wie die zabbix_agentd.exe" & @CRLF & _
|
||
" Gibt die Laufzeit des Programmes in Sekunden zur<75>ck." & @CRLF & _
|
||
@CRLF & _
|
||
" /verbose : Muss als 2. (discovertasks) oder 3. (query) Parameter" & @CRLF & _
|
||
" angegeben werden. Gibt umfangreiche Meldungen <20>ber die" & @CRLF & _
|
||
" Abfrage und das Senden der Daten aus" & @CRLF & _
|
||
@CRLF & _
|
||
"+------------------------------------------------------------------------------" & @CRLF & _
|
||
"| TaskSchedulderMonitoring.exe ist FREEWARE!" & @CRLF & _
|
||
"| Kopieren, weitergeben ausdr<64>cklich erlaubt!" & @CRLF & _
|
||
"| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:" & @CRLF & _
|
||
"| http://znil.net/index.php?title=Zabbix:TaskSchedulerMonitoring" & @CRLF & _
|
||
"+------------------------------------------------------------------------------" & @CRLF
|
||
|
||
|
||
; ##########################################################################################################################
|
||
; ##########################################################################################################################
|
||
; ########################################
|
||
; ######## ## ## ## ## ###### ######## #### ####### ## ## ###### ########################################
|
||
; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ########################################
|
||
; ## ## ## #### ## ## ## ## ## ## #### ## ## ########################################
|
||
; ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ########################################
|
||
; ## ## ## ## #### ## ## ## ## ## ## #### ## ########################################
|
||
; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ########################################
|
||
; ## ####### ## ## ###### ## #### ####### ## ## ###### ########################################
|
||
; ########################################
|
||
; ##########################################################################################################################
|
||
; ##########################################################################################################################
|
||
Func _schtasks($s_schtasksparameter)
|
||
_VerboseConsoleWrite("Funktion _schtasks wird gestartet")
|
||
Local $s_RunCommand
|
||
Local $outputschtasks
|
||
Local $errorsschtasks
|
||
Local $hschtasks
|
||
Local $ischtasksmaxWaitTime = 20000
|
||
Local $ischtasksmaxWaitTimeSTART
|
||
Local $s_tdoutReadFEHLER
|
||
; build the Command for run
|
||
;ConsoleWrite($s_schtasksexe & " " & $s_schtasksparameter & @CRLF)
|
||
_VerboseConsoleWrite("F<EFBFBD>hre Abfrage aus: " & $s_schtasksexe & " " & $s_schtasksparameter)
|
||
$s_RunCommand = $s_schtasksexe & " " & $s_schtasksparameter
|
||
; Start the timer for max wait time
|
||
$ischtasksmaxWaitTimeSTART = TimerInit()
|
||
; run the Command
|
||
$hschtasks = Run($s_RunCommand, @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)
|
||
;get the output
|
||
Do
|
||
Sleep(5)
|
||
; get the output
|
||
$outputschtasks = $outputschtasks & StdoutRead($hschtasks)
|
||
; get the errors
|
||
$errorsschtasks = $errorsschtasks & StderrRead($hschtasks)
|
||
; did we have an error while reading?
|
||
$s_tdoutReadFEHLER = @error
|
||
If $s_tdoutReadFEHLER <> "" Then
|
||
; No error, go on
|
||
If $outputschtasks = "" Then
|
||
; but also no output, let us take a 2. try
|
||
$outputschtasks = $outputschtasks & StdoutRead($hschtasks)
|
||
If $outputschtasks = "" Then
|
||
; anymore no output, oh oh
|
||
If $s_tdoutReadFEHLER <> "" Then
|
||
; but we have an error message
|
||
ConsoleWriteError($errorsschtasks & @CRLF)
|
||
EndIf
|
||
EndIf
|
||
EndIf
|
||
EndIf
|
||
Until $s_tdoutReadFEHLER Or TimerDiff($ischtasksmaxWaitTimeSTART) > $ischtasksmaxWaitTime
|
||
_VerboseConsoleWrite("Abfrage beendet. Ergebnis:" & $outputschtasks)
|
||
;MsgBox(0,"",$outputschtasks)
|
||
_VerboseConsoleWrite("Funktion _schtasks wird beendet")
|
||
Return $outputschtasks
|
||
EndFunc ;<== End _schtasks()
|
||
|
||
; ###################################################################################
|
||
; _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<50>fung der Gruppenzugeh<65>rigkeit ben<65>tigt f<>r Gruppen mit Umlauten, z.B. Dom<6F>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
|
||
|
||
; ###################################################################################
|
||
Func _VerboseConsoleWrite($VerboseText)
|
||
If $b_Verbose = True Then
|
||
If StringLen($VerboseText) < 16000 Then
|
||
ConsoleWrite(_ANSI2OEM($VerboseText) & @CRLF)
|
||
Else
|
||
ConsoleWrite($VerboseText & @CRLF)
|
||
EndIf
|
||
EndIf
|
||
EndFunc
|
||
|
||
|
||
; ###################################################################################
|
||
; Hilfsroutine die den Hilfetext ausgibt
|
||
Func _HilfeAusgeben()
|
||
ConsoleWrite(_ANSI2OEM($s__Header))
|
||
ConsoleWrite(_ANSI2OEM($s__HilfeText))
|
||
EndFunc ;==>_HilfeAusgeben
|
||
|
||
; ##################################################################################################################
|
||
; ######## ### ######## ######## #### ## ## ###### ####### ## ## ########
|
||
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ##
|
||
; ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ##
|
||
; ## ## ## ######## ######## ## ### ## ## ## ## ## ## ######
|
||
; ## ######### ## ## ## ## ## ## ## ## ## ## ## #### ##
|
||
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ##
|
||
; ####### ######## ## ## ######## ######## #### ## ## ####### ###### ####### ## ## ##
|
||
; ##################################################################################################################
|
||
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
|
||
|
||
Func _Zabbix_conf()
|
||
_VerboseConsoleWrite("Funktion _Zabbix_conf wird gestartet")
|
||
Dim $sRegTMP
|
||
Dim $iRegTMP = 0
|
||
Dim $iLoop
|
||
Dim $aRegTMP
|
||
Dim $aZabbix_config
|
||
Dim $sZabbix_config_file
|
||
Dim $a2temp
|
||
_VerboseConsoleWrite("Durchsuche Registry nach Zabbix Agent Dienst ...")
|
||
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
|
||
_VerboseConsoleWrite("Gefunden: " & $sRegTMP)
|
||
_VerboseConsoleWrite("Extrahiere Daten ...")
|
||
$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
|
||
_VerboseConsoleWrite("Lese Konfigurationsdatei ein: " & $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
|
||
_VerboseConsoleWrite("Fehler - Konfigurationsdatei nicht gefunden oder kein Zugriff m<>glich: " & $sZabbix_config_file)
|
||
ConsoleWrite("File not found: " & $sZabbix_config_file & @CRLF)
|
||
|
||
Exit 1
|
||
EndIf
|
||
If FileExists($sZabbix_sender_exe) = 0 Then
|
||
_VerboseConsoleWrite("Fehler - zabbix_sender.exe nicht gefunden oder kein Zugriff m<>glich: " & $sZabbix_sender_exe)
|
||
ConsoleWrite("zabbix_sender.exe not found at: " & $sZabbix_sender_exe & @CRLF)
|
||
Exit 1
|
||
EndIf
|
||
EndIf
|
||
EndIf
|
||
WEnd
|
||
_VerboseConsoleWrite("zabbix_agentd.exe: " & '"' & $sZabbix_agentd_exe & '"')
|
||
_VerboseConsoleWrite("zabbix_sender.exe: " & '"' & $sZabbix_sender_exe & '"')
|
||
_VerboseConsoleWrite("Hostname used in Zabbix: " & '"' & $sZabbix_Hostname & '"')
|
||
_VerboseConsoleWrite("IP(:Port) Zabbix Server: " & '"' & $sZabbix_Server & '"')
|
||
_VerboseConsoleWrite("Funktion _Zabbix_conf wurde beendet")
|
||
EndFunc
|
||
|
||
; #############################################################################################################################################################################################################################################################################
|
||
; ###### ######## ## ## ######## ## ## ### ## ## ## ######## ## ## #### ######## ## ## ######## ### ######## ######## #### ## ## ###### ######## ## ## ######## ######## ########
|
||
; ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ##
|
||
; ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ##
|
||
; ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## ###### ## ## ## ## ## ######### ## ## ## ######## ######## ## ### ###### ###### ## ## ## ## ## ###### ########
|
||
; ## ## ## #### ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ##
|
||
; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ##
|
||
; ####### ###### ######## ## ## ######## ### ## ## ######## ####### ######## ####### ### ### #### ## ## ## ####### ######## ## ## ######## ######## #### ## ## ####### ###### ######## ## ## ######## ######## ## ##
|
||
; #############################################################################################################################################################################################################################################################################
|
||
|
||
Func _SendValue_with_Zabbix_Sender($sItemName, $sItemValue)
|
||
_VerboseConsoleWrite('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"' & " -vv")
|
||
If $b_Verbose = False Then
|
||
RunWait('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"', "", @SW_HIDE, $RUN_CREATE_NEW_CONSOLE)
|
||
Else
|
||
RunWait('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"' & " -vv", "")
|
||
EndIf
|
||
EndFunc
|
||
|
||
|
||
; ####################################################################################################################
|
||
; ###### ######## ######## ### ## ## ######## ### ###### ## ## ######
|
||
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
|
||
; ## ## ## ## ## ## ## ## ## ## ## ## ## ##
|
||
; ## #### ###### ## ## ## ## ## ## ## ## ###### ##### ######
|
||
; ## ## ## ## ######### ## ## ## ######### ## ## ## ##
|
||
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
|
||
; ####### ###### ######## ## ## ## ######## ######## ## ## ## ###### ## ## ######
|
||
; ####################################################################################################################
|
||
Func _GetAllScheduledTasks()
|
||
_VerboseConsoleWrite("Funktion GetAllScheduledTasks wird gestartet")
|
||
Dim $s_lastTaskName = ""
|
||
; Get all scheduled Jobs
|
||
_VerboseConsoleWrite("Starte Abfrage der Tasks")
|
||
$s_temp1 = _schtasks("/query /FO CSV")
|
||
;ConsoleWrite($s_temp1 & @CRLF)
|
||
_VerboseConsoleWrite("Extrahiere Daten aus der R<>ckgabe")
|
||
$s_temp1 = StringReplace($s_temp1, @CRLF, "@CRLF")
|
||
$a_temp1 = StringSplit($s_temp1, "@CRLF", 1)
|
||
; _ArrayDisplay($a_temp1)
|
||
For $i = 2 To $a_temp1[0] ; Skip the first line with headlines
|
||
;_ArrayDisplay($a_temp1)
|
||
$b_IgnoreTask = False
|
||
;~ If StringLeft($a_temp1[$i], StringLen('"\Microsoft')) = '"\Microsoft' Then
|
||
;~ ExitLoop
|
||
;~ EndIf
|
||
If StringLeft($a_temp1[$i], 2) = '"\' Then
|
||
$a_temp2 = StringSplit($a_temp1[$i],",")
|
||
If $a_temp2[0] > 1 Then
|
||
$s_OriginalTaskName = StringTrimLeft(StringReplace($a_temp2[1], '"', "") ,1)
|
||
$s_CleanTaskName = StringTrimLeft(StringReplace($a_temp2[1], " ", "_") ,1)
|
||
$s_CleanTaskName = StringRegExpReplace($s_CleanTaskName, "[^\w\.@-]", "")
|
||
_VerboseConsoleWrite("Task gefunden : " & $s_OriginalTaskName)
|
||
_VerboseConsoleWrite("Bereinige Task Namen zu : " & $s_CleanTaskName)
|
||
If $a_Task2Ignore[0] > 0 Then
|
||
_VerboseConsoleWrite("Pr<EFBFBD>fe ob dieser Task ignoriert werden soll")
|
||
For $j = 1 To $a_Task2Ignore[0]
|
||
;MsgBox(0,"","$s_OriginalTaskName" & @CRLF & $a_Task2Ignore[$j] & @CRLF & @CRLF & $s_CleanTaskName & @CRLF & $a_Task2Ignore[$j])
|
||
If StringInStr($s_OriginalTaskName, $a_Task2Ignore[$j]) > 0 Then
|
||
$b_IgnoreTask = True
|
||
_VerboseConsoleWrite("Soll ignoriert werden: " & $s_OriginalTaskName & " <-> " & $a_Task2Ignore[$j])
|
||
EndIf
|
||
If StringInStr($s_CleanTaskName, $a_Task2Ignore[$j]) > 0 Then
|
||
$b_IgnoreTask = True
|
||
_VerboseConsoleWrite("Soll ignoriert werden: " & $s_CleanTaskName & " <-> " & $a_Task2Ignore[$j])
|
||
EndIf
|
||
Next
|
||
EndIf
|
||
If $s_lastTaskName = $s_OriginalTaskName Then
|
||
$b_IgnoreTask = True
|
||
_VerboseConsoleWrite("Ignoriere Task da gleicher Name wie beim Durchlauf wie zuvor")
|
||
EndIf
|
||
If $b_IgnoreTask = False Then
|
||
_VerboseConsoleWrite("Task soll nicht igoriert werden, f<>ge diesen der Liste hinzu")
|
||
$a_ScheduledTasks[0][0] = $a_ScheduledTasks[0][0] + 1
|
||
ReDim $a_ScheduledTasks[ $a_ScheduledTasks[0][0] + 1 ][8]
|
||
; [x][1] = Name des Task "original"
|
||
$a_ScheduledTasks[ $a_ScheduledTasks[0][0] ][1] = $s_OriginalTaskName
|
||
$s_lastTaskName = $s_OriginalTaskName
|
||
; [x][2] = Name des Tasks "bereinigt" - ohne Leerzeichen/Sonderzeichen zur Anzeige in Zabbix und zur <20>bergabe an dieses Programm hier
|
||
$a_ScheduledTasks[ $a_ScheduledTasks[0][0] ][2] = $s_CleanTaskName
|
||
EndIf
|
||
EndIf
|
||
Else
|
||
; Er beginnt in Zeile 2 nach geplanten Aufgaben zu suchen. Diese Fangen mit "\ an.
|
||
; Gibt es keine Aufgaben wird da wieder eine Kopfzeile mit den Feldbezeichnungen kommen f<>r den n<>chsten Abschnitt
|
||
; Und damit sind wir schon hier und verlassen die Schleife
|
||
ExitLoop
|
||
EndIf
|
||
Next
|
||
_VerboseConsoleWrite("Funktion GetAllScheduledTasks wird beendet")
|
||
EndFunc
|
||
|
||
; ##########################################################################################################################
|
||
; ##########################################################################################################################
|
||
; ####################################################################################
|
||
; ## ## ### #### ## ## ####################################################################################
|
||
; ### ### ## ## ## ### ## ####################################################################################
|
||
; #### #### ## ## ## #### ## ####################################################################################
|
||
; ## ### ## ## ## ## ## ## ## ####################################################################################
|
||
; ## ## ######### ## ## #### ####################################################################################
|
||
; ## ## ## ## ## ## ### ####################################################################################
|
||
; ## ## ## ## #### ## ## ####################################################################################
|
||
; ####################################################################################
|
||
; ##########################################################################################################################
|
||
; ##########################################################################################################################
|
||
$iStartTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc())
|
||
|
||
If StringInStr($CmdLineRaw, "/verbose") > 0 Then
|
||
$b_Verbose = True
|
||
Else
|
||
$b_Verbose = False
|
||
EndIf
|
||
|
||
If $CmdLine[0] > 0 Then
|
||
If $CmdLine[1] = "/?" Or $CmdLine[1] = "-?" Then
|
||
_HilfeAusgeben()
|
||
Exit 0
|
||
EndIf
|
||
EndIf
|
||
|
||
If $CmdLine[0] = 0 Then
|
||
_HilfeAusgeben()
|
||
Exit 0
|
||
EndIf
|
||
|
||
|
||
;~ If $CmdLine[0] = 0 Then
|
||
;~ _HilfeAusgeben()
|
||
;~ Exit 0
|
||
;~ EndIf
|
||
|
||
|
||
|
||
; Ok, we need the schtasks.exe,
|
||
$s_schtasksexe = @ComSpec & " /C " & @WindowsDir & "\system32\schtasks.exe"
|
||
$a_ScheduledTasks[0][0] = 0
|
||
$a_ScheduledTasks[0][1] = "Original Name"
|
||
$a_ScheduledTasks[0][2] = "Clean Name"
|
||
$a_ScheduledTasks[0][3] = "Last Result"
|
||
$a_ScheduledTasks[0][4] = "Last Run Time"
|
||
$a_ScheduledTasks[0][5] = "Next Run Time"
|
||
$a_ScheduledTasks[0][6] = "Run As User"
|
||
$a_ScheduledTasks[0][7] = "Task To Run"
|
||
|
||
|
||
; ##########################################################################################################################
|
||
; ##########################################################################################################################
|
||
; Some of the services are irritating, just ignore them - read items from a file
|
||
_VerboseConsoleWrite("Pr<EFBFBD>fe ob es eine Datei " & $s_Task2IgnoreFile & " gibt ...")
|
||
If FileExists($s_Task2IgnoreFile) = 1 Then
|
||
_VerboseConsoleWrite("Gefunden! Lese Datei ein")
|
||
$h_Task2IgnoreFile = FileOpen($s_Task2IgnoreFile, 0)
|
||
While 1
|
||
$s_temp1 = FileReadLine($h_Task2IgnoreFile)
|
||
If @error = -1 Then
|
||
ExitLoop
|
||
Else
|
||
If StringLen($s_temp1) > 2 Then ; at least 3 or more chars
|
||
_VerboseConsoleWrite("Eintrag gefunden: " & $s_temp1)
|
||
$a_Task2Ignore[0] = $a_Task2Ignore[0] + 1
|
||
ReDim $a_Task2Ignore[$a_Task2Ignore[0] + 1] ;That's AutoIt - Redim an Array without data-loss
|
||
$a_Task2Ignore[$a_Task2Ignore[0]] = $s_temp1
|
||
Else
|
||
_VerboseConsoleWrite("Ignoriere Eintrag mit weniger als 3 Zeichen: " & $s_temp1)
|
||
EndIf
|
||
EndIf
|
||
WEnd
|
||
_VerboseConsoleWrite("Einlesen der Ignorieren Eintr<74>ge beendet")
|
||
EndIf
|
||
|
||
;_ArrayDisplay($a_Task2Ignore)
|
||
|
||
|
||
|
||
|
||
If $CmdLine[1] = "discovertasks" Then
|
||
_VerboseConsoleWrite("Parameter discovertasks gefunden - ermittle Aufgaben und erstelle JSON")
|
||
_GetAllScheduledTasks()
|
||
_VerboseConsoleWrite("Baue JSON-String zusammen")
|
||
$s_JSONOutput = '{"data":[' & @CRLF
|
||
For $i = 1 To $a_ScheduledTasks[0][0]
|
||
$s_JSONOutput = $s_JSONOutput & " " & '{' & '@CRLF' & _
|
||
" " & '"{#TSMTASKNAME}":"' & $a_ScheduledTasks[$i][2] & '"' & '@CRLF' & _
|
||
" " & '},' & '@CRLF'
|
||
Next
|
||
$s_JSONOutput = StringTrimRight($s_JSONOutput, StringLen("," & "@CRLF")) & @CRLF & " " & ']' & @CRLF & '}'
|
||
$s_JSONOutput = StringReplace($s_JSONOutput, "@CRLF", @CRLF)
|
||
If StringLen($s_JSONOutput) < 11 Then
|
||
ConsoleWrite('{"data":[]}' & @CRLF)
|
||
Else
|
||
ConsoleWrite(_ANSI2OEM($s_JSONOutput))
|
||
EndIf
|
||
_VerboseConsoleWrite("Programm abgeschlossen")
|
||
Exit 0
|
||
EndIf
|
||
|
||
|
||
|
||
|
||
|
||
If $CmdLine[1] = "query" And $CmdLine[0] > 1 Then
|
||
_VerboseConsoleWrite("Parameter query gefunden - Frage bestimmten Task ab und sende Daten direkt an Zabbix Server")
|
||
_GetAllScheduledTasks()
|
||
$s_QueryTaskName = ""
|
||
$i_ThisTask = 0
|
||
_VerboseConsoleWrite("Suche den Originalnamen des gew<65>nschten Task")
|
||
If $a_ScheduledTasks[0][0] > 0 Then
|
||
For $i = 1 To $a_ScheduledTasks[0][0]
|
||
If $CmdLine[2] = $a_ScheduledTasks[$i][2] Then
|
||
$s_QueryTaskName = $a_ScheduledTasks[$i][1]
|
||
$i_ThisTask = $i
|
||
EndIf
|
||
Next
|
||
EndIf
|
||
If $s_QueryTaskName = "" Then
|
||
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
|
||
Exit 0
|
||
EndIf
|
||
_VerboseConsoleWrite("Gefunden: " & $s_QueryTaskName)
|
||
_VerboseConsoleWrite("Frage Status dieses Task ab: ")
|
||
$s_temp1 = _schtasks("/QUERY /FO CSV /V /TN " & '"' & $s_QueryTaskName & '"')
|
||
;ConsoleWrite($s_temp1 & @CRLF)
|
||
$s_temp1 = StringReplace($s_temp1, @CRLF, "@CRLF")
|
||
$a_temp1 = StringSplit($s_temp1, "@CRLF", 1)
|
||
If $a_temp1[0] < 2 Then
|
||
_VerboseConsoleWrite("R<EFBFBD>ckgabe der Abfrage war zu kurz / nicht erfolgreich")
|
||
ConsoleWrite("ZBX_SUPPORTED" & @CRLF)
|
||
Exit 0
|
||
EndIf
|
||
_VerboseConsoleWrite("Zerlege die R<>ckgabe")
|
||
$a_temp2 = StringSplit($a_temp1[2],",")
|
||
;_ArrayDisplay($a_temp2)
|
||
|
||
If $a_temp2[0] > 1 Then
|
||
;_ArrayDisplay($a_temp2)
|
||
;Last Result
|
||
$a_ScheduledTasks[$i_ThisTask][3] = StringReplace($a_temp2[7], '"', "")
|
||
|
||
;Last Run Time
|
||
; M<>gliche Werte zum Beispiel: "18.04.2015 01:00:00" oder "04/14/2015 01:00:00" oder "n/a"' oder "Nicht zutreffend"
|
||
If StringRegExp($a_temp2[6], '\d+') = 1 Then ; String enth<74>lt mindestens eine Zahl
|
||
If StringInStr($a_temp2[6], "/") > 0 Then
|
||
_VerboseConsoleWrite("Last Runtime gefunden in englischer Schreibweise: " & $a_temp2[6])
|
||
$a_temp1 = StringSplit(StringReplace($a_temp2[6], '"', ""), "/ ", 0)
|
||
; $a_temp1[1] = MM
|
||
; $a_temp1[2] = DD
|
||
; $a_temp1[3] = YYYY
|
||
; $a_temp1[4] = HH:MM:SS
|
||
;Input Start date in the format "YYYY/MM/DD[ HH:MM:SS]"
|
||
$a_ScheduledTasks[$i_ThisTask][4] = _DateDiff("s", "1970/01/01 00:00:00", $a_temp1[3] & "/" & $a_temp1[1] & "/" & $a_temp1[2] & " " & $a_temp1[4])
|
||
Else
|
||
_VerboseConsoleWrite("Last Runtime gefunden in deutscher Schreibweise: " & $a_temp2[6])
|
||
$a_temp1 = StringSplit(StringReplace($a_temp2[6], '"', ""), ". ", 0)
|
||
; $a_temp1[1] = DD
|
||
; $a_temp1[2] = MM
|
||
; $a_temp1[3] = YYYY
|
||
; $a_temp1[4] = HH:MM:SS
|
||
;Input Start date in the format "YYYY/MM/DD[ HH:MM:SS]"
|
||
$a_ScheduledTasks[$i_ThisTask][4] = _DateDiff("s", "1970/01/01 00:00:00", $a_temp1[3] & "/" & $a_temp1[2] & "/" & $a_temp1[1] & " " & $a_temp1[4])
|
||
EndIf
|
||
Else
|
||
_VerboseConsoleWrite("Last Runtime nicht gefunden: " & $a_temp2[6])
|
||
$a_ScheduledTasks[$i_ThisTask][4] = "ZBX_NOTSUPPORTED"
|
||
EndIf
|
||
|
||
; Next Run Time
|
||
; M<>gliche Werte zum Beispiel: "18.04.2015 01:00:00" oder "04/14/2015 01:00:00" oder "n/a"' oder "Nicht zutreffend"
|
||
If StringRegExp($a_temp2[3], '\d+') = 1 Then ; String enth<74>lt mindestens eine Zahl
|
||
If StringInStr($a_temp2[3], "/") > 0 Then
|
||
_VerboseConsoleWrite("Next Runtime gefunden in englischer Schreibweise: " & $a_temp2[6])
|
||
$a_temp1 = StringSplit(StringReplace($a_temp2[3], '"', ""), "/ ", 0)
|
||
; $a_temp1[1] = MM
|
||
; $a_temp1[2] = DD
|
||
; $a_temp1[3] = YYYY
|
||
; $a_temp1[4] = HH:MM:SS
|
||
;Input Start date in the format "YYYY/MM/DD[ HH:MM:SS]"
|
||
$a_ScheduledTasks[$i_ThisTask][5] = _DateDiff("s", "1970/01/01 00:00:00", $a_temp1[3] & "/" & $a_temp1[1] & "/" & $a_temp1[2] & " " & $a_temp1[4])
|
||
Else
|
||
_VerboseConsoleWrite("Next Runtime gefunden in deutscher Schreibweise: " & $a_temp2[6])
|
||
$a_temp1 = StringSplit(StringReplace($a_temp2[3], '"', ""), ". ", 0)
|
||
; $a_temp1[1] = DD
|
||
; $a_temp1[2] = MM
|
||
; $a_temp1[3] = YYYY
|
||
; $a_temp1[4] = HH:MM:SS
|
||
;Input Start date in the format "YYYY/MM/DD[ HH:MM:SS]"
|
||
$a_ScheduledTasks[$i_ThisTask][5] = _DateDiff("s", "1970/01/01 00:00:00", $a_temp1[3] & "/" & $a_temp1[2] & "/" & $a_temp1[1] & " " & $a_temp1[4])
|
||
EndIf
|
||
Else
|
||
_VerboseConsoleWrite("Next Runtime nicht gefunden: " & $a_temp2[6])
|
||
$a_ScheduledTasks[$i_ThisTask][5] = "ZBX_NOTSUPPORTED"
|
||
EndIf
|
||
|
||
; Run As User
|
||
$a_ScheduledTasks[$i_ThisTask][6] = StringReplace($a_temp2[8], '"', "")
|
||
_VerboseConsoleWrite("Task wird ausgef<65>hrt als: " & $a_ScheduledTasks[$i_ThisTask][6])
|
||
|
||
; Task To Run
|
||
$a_ScheduledTasks[$i_ThisTask][7] = StringReplace($a_temp2[9], '"', "")
|
||
_VerboseConsoleWrite("Ausgef<EFBFBD>hrt wird: " & $a_ScheduledTasks[$i_ThisTask][7])
|
||
Else
|
||
ConsoleWrite("ZBX_SUPPORTED" & @CRLF)
|
||
Exit 0
|
||
EndIf
|
||
_Zabbix_conf()
|
||
;_ArrayDisplay($a_ScheduledTasks)
|
||
;$a_ScheduledTasks[0][8] ; [0][0] = Anzahl der Tasks
|
||
; [x][1] = Name des Task "original"
|
||
; [x][2] = Name des Tasks "bereinigt" - ohne Leerzeichen/Sonderzeichen zur Anzeige in Zabbix und zur <20>bergabe an dieses Programm hier
|
||
; [x][3] = Last Result
|
||
; [x][4] = Last Run Time
|
||
; [x][5] = Next Run Time
|
||
; [x][6] = Run As User
|
||
; [x][7] = Task To Run
|
||
_VerboseConsoleWrite("Sende Daten mit zabbix_sender.exe")
|
||
_SendValue_with_Zabbix_Sender("znil.TaskSchedulerMonitoring[LastResult," & $a_ScheduledTasks[$i_ThisTask][2] & "]", $a_ScheduledTasks[$i_ThisTask][3])
|
||
_SendValue_with_Zabbix_Sender("znil.TaskSchedulerMonitoring[LastRunTime," & $a_ScheduledTasks[$i_ThisTask][2] & "]", $a_ScheduledTasks[$i_ThisTask][4])
|
||
_SendValue_with_Zabbix_Sender("znil.TaskSchedulerMonitoring[NextRunTime," & $a_ScheduledTasks[$i_ThisTask][2] & "]", $a_ScheduledTasks[$i_ThisTask][5])
|
||
_SendValue_with_Zabbix_Sender("znil.TaskSchedulerMonitoring[RunAsUser," & $a_ScheduledTasks[$i_ThisTask][2] & "]", $a_ScheduledTasks[$i_ThisTask][6])
|
||
$iRunTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc()) - $iStartTime
|
||
ConsoleWrite($iRunTime & @CRLF)
|
||
Exit 0
|
||
Else
|
||
ConsoleWrite("ERROR - Option 'query' without Parameter - see /? vor Help")
|
||
EndIf
|
||
|
||
Exit 0 |