Programmausführung loggen

Diskutiere Programmausführung loggen im Windows Server 2003 Forum im Bereich Server Systeme; Moin! Hat jemand von Euch einen guten Tipp, wie man recht einfach (und ohne zusätzliche Software) die Ausführung von Programmen mitloggen kann...

Knutsen

Threadstarter
Dabei seit
05.02.2007
Beiträge
10
Moin!

Hat jemand von Euch einen guten Tipp, wie man recht einfach (und ohne zusätzliche Software) die Ausführung von Programmen mitloggen kann? Vielleicht im Eventlog, daß dort im Anwendungsbereich steht "XY wurde gestartet" und "XY wurde beendet".
 

PraesidentEvil

Dabei seit
19.04.2005
Beiträge
1.623
Alter
36
Vermutlich nur, wenn du um das Programm eine Logik baust!
D.h. dass, das Programm durch ein Script zum Beispiel gestartet wird, welches eventvwr Einträge macht und solange läuft, bis das Programm beendet wurde. Finde ich persönlich aber bescheuert!!

Oder mache ein Script welches alle 5 Sekunden deine laufenden Prozesse ausließt....finde ich aber auch bescheuert :D

Vielleicht hat jemand noch eine andere Idee!
 

Knutsen

Threadstarter
Dabei seit
05.02.2007
Beiträge
10
Letztere Lösung würde auch zu einer Flut an Events führen, wenn alle 5 Sekunden Einträge generiert werden. Oder es müsste mehr Logik rein, daß überprüft wird, ob seit dem Starten schon ein Eintrag generiert wurde. Aber das wär mir zu kompliziert. *g*

Hm, scheinbar ist das wohl nicht so einfach mit Windows-Bordmitteln zu schaffen.... zusätzliche Software wäre auch okay, aber die muss ich dann erstmal bei uns auf dem Testserver ausprobieren.
 

Mike

i7-6700HQ
Dabei seit
21.09.2006
Beiträge
24.384
Ort
Outdoor oder vorm Rechner
zusätzliche Software wäre auch okay, aber die muss ich dann erstmal bei uns auf dem Testserver ausprobieren.

oben genannte Software läuft nicht auf einem Server. Für Server gibt es genügend andere Monitoring-Tools ;)
 

PraesidentEvil

Dabei seit
19.04.2005
Beiträge
1.623
Alter
36
Letztere Lösung würde auch zu einer Flut an Events führen, wenn alle 5 Sekunden Einträge generiert werden. Oder es müsste mehr Logik rein, daß überprüft wird, ob seit dem Starten schon ein Eintrag generiert wurde. Aber das wär mir zu kompliziert.

Im Prinzip müssten ja nur die neuen Daten mit den alten verglichen werden und die Delta Daten könntest du mitloggen lassen! Dann wiederum brauchst du auch eine "Friendlyliste" in der alle Prozesse stehen, die dein Script ignorieren soll. Sonst steht dein evenetlog voll mit Meldungen:

Die Anwendung rundll32.exe wurde gestartet
Die Anwendung rundll32.exe wurde beendet
Die Anwendung rundll32.exe wurde gestartet
Die Anwendung rundll32.exe wurde beendet
...
:D
 

Knutsen

Threadstarter
Dabei seit
05.02.2007
Beiträge
10
Mike: Keine Sorge, das genannte Programm hätte ich auch nicht auf einem Server einsetzen wollen. :D Hast Du einen Tipp für ein Monitoring-Programm, das die genannte Aufgabe erfüllt?

Ansonsten komm ich wohl doch nicht um eine kleine Eigenprogrammierung rum...
 

Knutsen

Threadstarter
Dabei seit
05.02.2007
Beiträge
10
Hab mich mal an ein VBS gesetzt, was den Zweck erfüllen soll.... Überwachung der laufenden Prozesse und Meldung bei Starten oder Beenden von Prozessen im Ereignislog.

Was funktioniert: Die Überwachung des Starts von Prozessen verläuft zuverlässig.
Was nicht funktioniert: Beim Beenden von Prozessen wird die Meldung nicht immer gespeichert... ein Bug. Es wird erst beim Starten eines Prozesses nach dem Speichern der Meldung, daß ein Prozess gestartet wurde, die Meldung des zuletzt beendeten Prozesses gespeichert. Wurden davor noch weitere beendet, fallen diese Meldungen unter den Tisch. Hat jemand Muße, sich den Code anzuschauen und ggf. auch anderweitig zu verbessern? ;-)

PS: Das Script braucht eine whitelist.txt im gleichen Verzeichnis. Je Zeile ein Prozess, der nicht überwacht werden soll, also z.B. "svchost.exe" in einer Zeile, in der nächsten dann "taskmgr.exe" usw.

--------------------

Code:
Dim File, strComputer, eRet, processtxt, runallways, run, entry, output

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set ofso = createobject("Scripting.FileSystemObject")

' Whitelist: Prozesse, die nicht überwacht werden sollen
File = ".\whitelist.txt"
run = 0
runallways = 1

' ProcessArrays zur Berechnung des Deltas zwischen zwei Messungen
Dim ProcessArray()
Redim ProcessArray(0)
Dim TempArray()
Redim TempArray(0)

' Zur Speicherung der Meldungen im Ereignislog
Set objShell = Wscript.CreateObject("Wscript.Shell")

if ofso.fileexists(File) then

	' Whitelist-Einträge einladen	
	Set processtxt = ofso.OpenTextFile(File, 1)
	RA =  processtxt.ReadAll
	GetLine = processtxt.Line   
	processtxt.close
	counter = 0

	sqlAdd = " WHERE Name != " & """" & "Check" & """" 
	Set processtxt = ofso.OpenTextFile(File, 1)
	Do until counter = GetLine
		sqlAdd	= sqlAdd & " AND Name != " & """" & processtxt.ReadLine & """"
		counter = counter + 1
	Loop	
	sql = "Select * from Win32_Process " & sqlAdd	

	' Beginne mit der Prozessüberwachung (Endlosschleife! Überwachung beenden mit Killen von wscript.exe im Task-Manager.)
	Do Until run = 1

		' Prozesse lesen
		Set colProcessList = objWMIService.ExecQuery(sql)

		procCount = 0
		' Alle laufenden Prozesse durchgehen
		For Each objProcess in colProcessList
			' Nachschauen, ob der Prozess neu gestartet wurde
			processAlreadyRunning = false
			For Each entry in ProcessArray
				if objProcess.Name = entry then
					processAlreadyRunning = true
				end if
			Next
			if processAlreadyRunning = false then
				objShell.LogEvent 0, objProcess.Name & " was started..."
			end if

			' Bei zu kleinem Array, erweitern...
			procCount = procCount + 1
			if Ubound(TempArray) < procCount then redim preserve TempArray(procCount)
  			TempArray(procCount) = objProcess.Name
		Next

		' Nachschauen, ob Prozesse seit dem letzten Durchlauf beendet wurden
		For Each entry in ProcessArray
			processStillRunning = false
			' Nachschauen, ob der alte Prozess noch läuft
			For Each oldEntry in TempArray
				if oldEntry = entry then processStillRunning = true
			Next
			if processStillRunning = false then
				objShell.LogEvent 0, entry & " has been ended..."
			end if
		Next
		
		' Neues Prozessarray wird zum alten
		ReDim ProcessArray( Ubound(TempArray) )
		For i = 1 To UBound(TempArray)
			ProcessArray(i) = TempArray(i)
		Next

		' Warte einige (Milli)sekunden bis zum neuen Durchlauf (je nach Prozessorstärke und Wunsch anpassen)
		WScript.sleep 100

		if runallways = 0 then
			run = run + 1
		end if

	Loop
	
else
	wscript.echo "whitelist.txt nicht gefunden"
end if
 
Thema:

Programmausführung loggen

Programmausführung loggen - Ähnliche Themen

Programmstart über die Aufgabenplanung.: Hallo. Ich habe folgendes Problem. Ich habe in der Aufgabenplanung eine Aufgabe hinterlegt welche ein Programm (Core Temp) starten soll welches...
Windows Update Fehler 0x80080005: Guten Morgen! wie im Betreff beschrieben, bekomme ich diesen Fehler beim ausführen von Windows Update. Folgende Fehlerbehebungen wurden schon...
Plötzlich erscheint wieder der Ordner "Clutter"!: Hallo, ich habe ein Problem mit meinem Outlook-com-Konto. Gestern habe ich das Konto in Outlook auf dem Mac eingerichtet und seitdem...
windows updates: Hallo. ICh hoff jemand kann mir bei diesm problem helfen mein windows bekamm gestern ohne ende updates nachdem ich diese kurzzeitig pausier hab...
Zweiter Monitor wird nicht mehr erkannt: Hallo, ich habe zwei Monitore und bis heute Morgen war alles fein. Plötzlich hat die Maus nicht mehr richtig funktioniert: Ich konnte sie auf dem...

Sucheingaben

ereignisanzeige sehen wann programm zuletzt gestartet wurde

,

windows ereignis anwendung beendet

,

windows Programm beendet eventlog

,
windows logfile gestartete programme
, Programmstarts (protokollieren OR loggen OR logging)
Oben