Eventlog auslesen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
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.
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.
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

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
Zuletzt geändert von querdenker am Dienstag 10. Januar 2006, 12:55, insgesamt 1-mal geändert.
Antworten