Hallo zusammen,
erst einmal ein "Hallo" in die Runde. Ist ja mein erstes Posting hier.
Ich bin auf AutoIT gekommen, da ich bei uns im Unternehmen für das Theme Monitoring zuständig bin und mich aktuell mit dem Thema End2End-Monitoring mit Nagios beschäftige. Ich habe über die Suche schon herausgefunden, dass ich da nicht der Einzige bin und ich habe mit Hilfe diverser Einträge hier im Forum auch schon die meisten Hürden überwunden. Doch aktuell komme ich nicht weiter.
Die Ausführung des beigefügten Scripts wird alle drei Minuten von unserem Nagios-System mit Hilfe des NSClients++ initiiert. Auf dem ausführenden System ist ein Windows Server 2008 Standard x86 installiert. Der NSClient läuft unter dem SYSTEM-Account und darf mit dem Desktop interagieren. Das AutoIT-Script wird daher auch unter dem SYSTEM-Account ausgeführt. Innerhalb des Scripts wird dann die Applikation mit der "RunAs"-Funktion aufgerufen und unter einem Domänen-Benutzer gestartet. Jetzt das Problem: Das Script läuft einwandfrei für ca. 1,5-2 Stunden. Danach wird zwar das Hauptscript immer noch ordnungsgemäß ausgeführt, der RunAs-Aufruf scheitert jedoch --> Die Anwendung wird nicht gestartet. Erst nach einem Reboot des Servers funktioniert der Aufruf wieder für den o.g. Zeitraum. Ein Restart des NSClient++-Dienst bringt nichts. Der Rückgabewert der RunAs-Funktion und @ERROR ist 0. Was noch interessant ist: Wenn ich das Script interaktiv(nicht über den Dienst) starte, läuft's einwandfrei.
Hat da jemand ne Idee, was das Problem sein könnte? Habe schon diverse Dinge wie Bildschirmschoner, GPO, Kerberos-Einstallungen etc. geprüft, jedoch ohne Ergebnis.
Danke bereits im Voraus für eure Hilfe.
Tyler
Spoiler anzeigen
#cs
Calc-Check 0.1 - Prüft, wie lange die Berechnung und der Aufruf des Tachenrechners dauert und gibt die Rückwerte an Nagios"
#ce
#include <WinExpected.au3>
$g_szVersion = "Calc-Check 0.1"
$username="MEINUSER"
$warn= $CmdLine[1]
$crit= $CmdLine[2]
$timeline = TimerInit()
; Prüfen, ob schon ein Calc-Check-Prozess läuft
If WinExists($g_szVersion) Then
ConsoleWrite("UNKNOWN: " & $g_szVersion & " laeuft bereits! Beenden...")
Exit(3)
EndIf
; Prüfen, ob schon ein Calc-Prozess läuft
If ProcessExists("calc.exe") Then
ConsoleWrite("UNKNOWN: Check laeuft bereits! Beenden...")
Exit(3)
EndIf
$ergebnis= RunAs($username, "MEINEDOMÄNE", "MEINPASSWORT", 1, "C:\windows\system32\calc.exe")
WinActivate("Rechner")
If (_WinExpected("Rechner", "", 5) <> 1) Then
If ProcessExists("calc.exe") Then
$list = ProcessList("calc.exe")
for $i = 1 to $list[0][0]
ProcessClose($list[$i][1])
next
ConsoleWrite("UNKNOWN: Fenster Calc erscheint nicht! Beende Prozesse! Beenden...")
Exit(3)
Else
ConsoleWrite("UNKNOWN: Fenster Calc erscheint nicht! Beenden..." & $ergebnis & @error)
Exit(3)
EndIf
EndIf
Send("!A") ; oeffnet das Menue "Ansicht"
Sleep(2000)
Send("W") ; Waehlt "Wissenschaftlich"
Sleep(2000)
ControlClick("Calc","","Button48")
Sleep(2000)
ControlClick("Calc","","Button60")
Sleep(2000)
ControlClick("Calc","","Button47")
Sleep(2000)
ControlClick("Calc","","Button65")
Sleep(2000)
WinClose("Rechner")
$dif = TimerDiff($timeline) / 1000
$resulttmp = StringLeft($dif, 4)
$result = Number($resulttmp)
Select
Case $result = 0
ConsoleWrite("UNKNOWN: Check dauerte " & $result & " Sekunden|Time=" & $result & ";" & $warn & ";" & $crit)
Exit(3)
Case $result < $warn
ConsoleWrite("OK: Check dauerte " & $result & " Sekunden|Time=" & $result & ";" & $warn & ";" & $crit)
Exit(0)
Case $result < $crit
ConsoleWrite("WARNING: Check dauerte " & $result & " Sekunden|Time=" & $result & ";" & $warn & ";" & $crit)
Exit(1)
Case $result >= $crit
ConsoleWrite("CRITICAL: Check dauerte " & $result & " Sekunden|Time=" & $result & ";" & $warn & ";" & $crit)
Exit(2)
Case Else
Exit(3)
EndSelect