我正在开发一个程序,不需要知道如何根据一个记录号读取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
我意识到这是一个老问题,但我遇到了,如果我遇到了,其他人也可能。
您还可以编写自定义查询,允许您通过任何可以编写脚本的WMI参数(包括事件ID)进行查询。它还有一个好处,就是可以让您拉出并清除所有的VBS WMI查询。实际上,我比其他任何人更频繁地使用这个功能。有关示例,请参见:
下面是一个在应用程序日志中查询特定事件的示例。我还没有详细说明,但您也可以构建一个WMI时间字符串,并查询特定日期/时间之间或之后的事件。
不!没有任何函数允许您根据事件id获取事件
引用:Event logging functions
唯一感兴趣的方法是读取最早的事件。
您必须以任何方式迭代结果,并且您的方法是正确的:)
您只能像下面这样更改方法的形式,但这是不必要的。
这和你做的一样,但更简洁
现在有一个python库(python 3及更高版本)可以完成您所要求的任务,称为winevt。你要找的可以通过以下方式完成:
相关问题 更多 >
编程相关推荐