2011-03-04 8 views
0

WMI를 사용하여 "보안"로그를 쿼리 할 수 ​​없습니다. 다른 로그는 정상적으로 작동합니다.파이썬 WMI 모니 커 문제

import wmi 
c = wmi.GetObject(r"winmgmts:{impersonationLevel=delegate,(Security)}!\\.\root\cimv2") 
for i in c.ExecQuery("SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'Security'"): 
    print i 

그것은 나에게 빈 결과를 반환 및 보안 로그에 "감사 실패"reacord를 만들 : 여기 내가 사용하는 것입니다. 내가 언급했듯이, 나는 다른 모든 로그를 질의 할 수 있지만이 하나의 로그는 질의 할 수 없다. 그래서 난 생각 문제는 (여기 문제입니다)

C = wmi.GetObject에

답변

1

당신이 win32evtlog 길을 갈 생각 가지고는?

import win32evtlog 

outfile = open('NTLog.log', 'w') 
server = 'SERVER_Name' 
logtype = 'Security' 
hand = win32evtlog.OpenEventLog(server, logtype) 
flags = win32evtlog.EVENTLOG_BACKWARDS_READ|win32evtlog.EVENTLOG_SEQUENTIAL_READ 
total = win32evtlog.GetNumberOfEventLogRecords(hand) 
count = 0 
while count != total: 
    events = win32evtlog.ReadEventLog(hand, flags,0) 
    if events: 
     for event in events: 
      data = event.StringInserts 
      if data: 
       outfile.write(data[0]) 

이 정말 완벽하게 구현되지 않습니다, 그러나 희망이 다시 궤도에 당신을 얻을 수 ... 이것은 내가 과거에 사용했던 것의 일부이며 그것은 잘 작동하는 것 같다!