2012-10-16 10 views
7

मैं एक विंडोज इवेंट लॉग निर्यात करने की कोशिश कर रहा हूं लेकिन निर्यात की गई घटनाओं को संख्या के अनुसार सीमित नहीं करता लेकिन समय के अनुसार ईवेंट लॉग किया गया था। मैं विंडोज 7 और नए पर ऐसा करने की कोशिश कर रहा हूं। अब तक मेरे प्रयास wevtutil का उपयोग करने पर केंद्रित हैं।पिछले दो हफ्तों के लिए क्वेरी विंडोज इवेंट लॉग

मैं wevtutil का उपयोग कर रहा हूं और मेरी कमांड लाइन अब है: wevtutil Application events.evtx समस्या यह है कि मैं पूरा लॉग निर्यात करता हूं और यह काफी बड़ा हो सकता है इसलिए मैं इसे पिछले 2 सप्ताह तक सीमित करना चाहता हूं।

मुझे this पोस्ट मिला है लेकिन सबसे पहले यह मेरे सिस्टम पर किसी भी आउटपुट का उत्पादन नहीं करता है (हाँ मैंने तिथियां और समय बदल दिया है) और दूसरा ऐसा लगता है कि मैं जिस प्रारूप प्रारूप से बचने की कोशिश करता हूं उस पर निर्भर करता है ।

wevtutil qe Application "/q:*[System[TimeCreated[@SystemTime>='2012-10-02T00:00:00' and @SystemTime<'2012-10-17T00:00:00']]]" /f:text 

मैं वास्तविक प्रतीकों के साथ &lt; और &gt; को बदलने के लिए के रूप में मैं एक सिंटैक्स त्रुटि अन्यथा मिल गया था:

यहाँ संशोधित आदेश मैं भाग गया है। यह आदेश खाली आउटपुट पैदा करता है।

logparser -i:evt file:query.sql 

query.sql कुछ युक्त इस तरह है::

SELECT 
    TimeGenerated,EventID,SourceName,Message 
FROM Application 
WHERE TimeGenerated > TO_TIMESTAMP(SUB(TO_INT(SYSTEM_TIMESTAMP()), 1209600)) 
ORDER BY TimeGenerated DESC 

कुछ हद तक unintuitive तारीख गणना धर्मान्तरित सिस्टम का समय (SYSTEM_TIMESTAMP()) एक करने के लिए

उत्तर

1

मैं:

logparser -i:evt file:query.sql+days=14 

तुम भी logparser के लिए सीधे क्वेरी पारित कर सकते हैं आप PowerShell के बारे में नहीं जानते हैं, लेकिन यह आपके द्वारा टैग की गई सभी प्रणालियों पर उपलब्ध है।

शक्तिशक्ति संकेत से, अधिक जानकारी के लिए Get-Help Get-EventLog -Examples देखें।

आप एक .cmd या .bat फ़ाइल से यह करने के लिए है, तो आप PowerShell.exe -File powershell_script_file_name कॉल कर सकते हैं

जहां powershell_script_file_name Get-इवेंटलॉग आदेश (रों) आप इसे में की जरूरत है।

यह उदाहरण सभी सुरक्षा ईवेंट लॉग विफलताओं देता है, मैं लेखा परीक्षा प्रणाली के लिए उपयोग करें:

Get-EventLog -LogName security -newest 1000 | where {$_.entryType -match "Failure"} 
+0

जैसा कि मैं इसे एक स्क्रिप्ट में शामिल करना चाहता हूं, हम उस उत्पाद के साथ शिपिंग कर रहे हैं जो हम विकसित कर रहे हैं हम शक्तिशक्ति (कानूनी और लाइसेंसिंग मुद्दों) पर निर्भरता से बचना चाहते हैं। –

2

मैं दृढ़ता से काम के इस प्रकार के लिए LogParser उपयोग करने की अनुशंसा पूर्णांक (TO_INT()), 1209600 सेकंड (60 * 60 * 24 * 14 = 2 सप्ताह) घटाता है और परिणाम को एक टाइमस्टैम्प (TO_TIMESTAMP()) में परिवर्तित करता है, इस प्रकार से तारीख का उत्पादन 2 सप्ताह पहले।

आप MUL(86400, $days) साथ सेकंड की निश्चित संख्या की जगह है और इस के लिए कमांडलाइन बदलकर समयावधि parameterize कर सकते हैं:

logparser -i:evt "SELECT TimeGenerate,EventID,SourceName,Message FROM ..." 
+1

मैं अतिरिक्त निष्पादनयोग्य कि मानक खिड़कियों वितरण संभव हो तो का हिस्सा नहीं हैं का उपयोग कर से बचने के लिए चाहते हैं। –

+0

आप अपनी पसंद के स्थान पर 'लॉगपार्सर' निष्पादन योग्य और डीएलएल की प्रतिलिपि बना सकते हैं और इसे वहां से चला सकते हैं, लेकिन यह आपका निर्णय है। –

10

समस्या के लिए/q वजह से है: कोट के अंदर जा रहा है। यह बाहर होना चाहिए, जैसे:

wevtutil qe Application /q:"*[System[TimeCreated[@SystemTime>='2012-10-02T00:00:00' and @SystemTime<'2012-10-17T00:00:00']]]" /f:text 

यह मेरे लिए ठीक काम करता है।

+0

अभी भी मेरे लिए काम नहीं कर रहा है। यह आदेश फिर से खाली उत्पादन पैदा करता है। –

+0

इस बार, आपको सही तिथियां डालना भूल जाना चाहिए था। मैंने इसे कमांडलाइन, निश्चित तिथियों में चिपकाया, और यह काम किया। इसके अलावा, मैंने अपने क्रैश डायग्नोस्टिक्स सिस्टम के लिए कोड में लागू किया है और यह ठीक काम करता है। – Codeguard

2

पिछले 2 सप्ताह की घटनाओं के लिए, आप हार्ड-कोडिंग तिथियों से बचने के लिए timediff का भी उपयोग कर सकते हैं।

विंडोज मिलीसेकंड का उपयोग करता है, तो यह 1000 * 86400 (सेकंड, = 1 दिन) * 14 (दिनों) = 1209600000.

आपकी क्वेरी के लिए हो सकता है, इस तरह

wevtutil qe Application /q:"*[System[TimeCreated[timediff(@SystemTime) <= 1209600000]]]" /f:text /c:1 

मैं विचार करेंगे उदाहरण में केवल 1 घटना प्राप्त करने के लिए /c:1 जोड़ा गया, क्योंकि पिछले 2 सप्ताह में कई घटनाएं हैं।

आप केवल चेतावनी और त्रुटियों को सूचीबद्ध करना चाहते हैं। इसके लिए, आप (Level=2 or Level=3) का उपयोग कर सकते हैं। (किसी कारण से, Level<4 Win7 पर मेरे लिए काम नहीं लगता है)

wevtutil qe Application /q:"*[System[(Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 1209600000]]]" /f:text /c:1 
संबंधित मुद्दे