Seite 1 von 1

Eventlog auslesen

Verfasst: Dienstag 7. Oktober 2003, 15:16
von JH
Moin!

Wie kann ich mir den Inhalt (Eigenschaften) eines bestimmten Events des Eventlogs anzeigen lassen? Ich komme schon an die Events ran, aber noch nicht so richtig - es ist wohl nur ein Zeiger den ich bekomme. Das habe ich bislang:

Code: Alles auswählen

import win32evtlog
import win32evtlogutil

logtype='System'
server='computername'

hand=win32evtlog.OpenEventLog(server,logtype)
print 'Handle: '+str(hand)

total=win32evtlog.GetNumberOfEventLogRecords(hand)
print 'Anzahl Ereignisse: '+str(total)

flags = win32evtlog.EVENTLOG_BACKWARDS_READ|win32evtlog.EVENTLOG_SEQUENTIAL_READ
print 'Flags: '+str(flags)

events=win32evtlog.ReadEventLog(hand,flags,0)
print 'Events: '+str(events)
Edit (Leonidas): Code in Python Tags gesetzt.

Verfasst: Montag 21. März 2005, 09:25
von Gast
Hi,

über die Schleife mit win32evtlogutil.SafeFormatMessage bekommt man den Meldugnstext.

Code: Alles auswählen

for ev_obj in events:

	the_time=ev_obj.TimeGenerated.Format() #'12/23/99 15:54:09'

	evt_id=str(winerror.HRESULT_CODE(ev_obj.EventID))

	computer=str(ev_obj.ComputerName)

	cat=ev_obj.EventCategory

	seconds=date2sec(the_time)

	record=ev_obj.RecordNumber

	msg=str(win32evtlogutil.SafeFormatMessage(ev_obj, logtype))

	source=str(ev_obj.SourceName

def date2sec(self,evt_date):

	'''

	converts '12/23/99 15:54:09' to seconds

	print '333333',evt_date

	'''

	regexp=re.compile('(.*)\\s(.*)')

	reg_result=regexp.search(evt_date)

	date=reg_result.group(1)

	the_time=reg_result.group(2)

	(mon,day,yr)=map(lambda x: string.atoi(x),string.split(date,'/'))

	(hr,min,sec)=map(lambda x: string.atoi(x),string.split(the_time,':'))

	tup=[yr,mon,day,hr,min,sec,0,0,0]

	sec=time.mktime(tup)

	return sec



Leider bekommt man nur eine handvoll Meldungen zurück!
Weiss jemand wie man alle gespeicherten Meldungen zurückbekommt?


Edit (Leonidas): Code in Python Tags gesetzt.

Verfasst: Montag 21. März 2005, 11:13
von querdenker
1) Bitte benutzt beim posten den Python-Button.
Einfaches copy-paste führt dazu, das der Code nicht mehr lesbar ist!

2) Registriert euch doch mal. Anonymes Frage in die Runde werfen ist "komisch"

3) In dem win32evt-Beispiel steht explizit beschrieben, das nur die Events der letzen 8 Stunden ausgelesen werden sollen. Mit anderen Worten:
Bei der Überprüfung des Alters eines Events wird ein Break ausgelöst, wenn das Alter > 8 Stunden ist.

Code: Alles auswählen

try:
  events=1
  while events:
    events=win32evtlog.ReadEventLog(hand,flags,0)
      for ev_obj in events:
        #check if the event is recent enough
        #only want data from last 8hrs
        the_time=ev_obj.TimeGenerated.Format()
        seconds=date2sec(the_time)
        #########Hier ist die Stelle!!!!######
        if seconds < begin_sec-28800: 
            break
        #data is recent enough, so print it out
        computer=str(ev_obj.ComputerName)
.....
mfg, querdenker
EDIT: Datei gelöscht, daher Link gelöscht