15

私はプログラムに取り組んでおり、このスクリプトが既に持っているレコード番号に基づいて Windows イベント ログへの特定のエントリを読み取る方法を知る必要はありません。以下は私が作業しているコードですが、探しているイベントが見つかるまですべてのイベントをループしたくありません。何か案は?

import win32evtlog

server = 'localhost' # name of the target computer to get event logs
logtype = 'System'
hand = win32evtlog.OpenEventLog(server,logtype)
flags = win32evtlog.EVENTLOG_BACKWARDS_READ|win32evtlog.EVENTLOG_SEQUENTIAL_READ
total = win32evtlog.GetNumberOfEventLogRecords(hand)

while True:
    events = win32evtlog.ReadEventLog(hand, flags,0)
    if events:
        for event in events:
            if event.EventID == "27035":
                print 'Event Category:', event.EventCategory
                print 'Time Generated:', event.TimeGenerated
                print 'Source Name:', event.SourceName
                print 'Event ID:', event.EventID
                print 'Event Type:', event.EventType
                data = event.StringInserts
                if data:
                    print 'Event Data:'
                    for msg in data:
                        print msg
                break
4

3 に答える 3

10

いいえ!イベント ID に基づいてイベントを取得できる関数はありません。

参考:イベントロギング機能

GetNumberOfEventLogRecords  Retrieves the number of records in the specified event log.
GetOldestEventLogRecord     Retrieves the absolute record number of the oldest record 
                            in the specified event log.
NotifyChangeEventLog        Enables an application to receive notification when an event
                            is written to the specified event log.

ReadEventLog                Reads a whole number of entries from the specified event log.
RegisterEventSource         Retrieves a registered handle to the specified event log.

興味深い唯一の方法は、最も古いイベントを読み取ることです。

何らかの方法で結果を反復処理する必要があり、アプローチは正しいです:)

以下のようにアプローチの形式を変更することしかできませんが、これは不要です。

events = win32evtlog.ReadEventLog(hand, flags,0)
events_list = [event for event in events if event.EventID == "27035"]
if event_list:
    print 'Event Category:', events_list[0].EventCategory

これはあなたがやっているのと同じ方法ですが、より簡潔です

于 2012-06-27T05:16:32.733 に答える