| |

VB Skript (VBS)Programmausführung loggen | |  | Autor: Knutsen | Datum: 13.06.07 07:05 |
| Hab mich mal an ein VBS gesetzt, was den Zweck erfüllen soll, den Start und die Beendigung von Prozessen zu überwachen und eine Meldung bei Starten oder Beenden von Prozessen im Ereignislog abzusetzen.
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... offenbar 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 mir einen Tipp zu geben, woran das liegen könnte?
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.
PPS: Die CPU-Auslastung ist momentan etwas hoch, weil das Script einmal alle 100ms durchläuft. An sich kann das Script aber auch einmal alle 5s laufen - oder sogar noch weniger. Dafür dann einfach den Wert im sleep-Aufruf am Ende des Scripts erhöhen.
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 |  |
 Programmausführung loggen | 2.698 | Knutsen | 13.06.07 07:05 |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevCoolbar 3.0 
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|