2013-03-07 6 views
7

मैं एक विशिष्ट विंडोज इवेंट लॉग को पूंछ करने के लिए शक्तियों का उपयोग कैसे कर सकता हूं? क्या यह संभव है?पावरहेल - टेल विंडोज इवेंट लॉग? क्या यह संभव है?

+0

पूंछ तय? आयन मॉनीटर के रूप में? या एक विशिष्ट घटना की पूंछ प्राप्त करें? –

उत्तर

6

मैं इस अवसर पर यह कर दिया है:

$idx = (get-eventlog -LogName System -Newest 1).Index 

while ($true) 
{ 
    start-sleep -Seconds 1 
    $idx2 = (Get-EventLog -LogName System -newest 1).index 
    get-eventlog -logname system -newest ($idx2 - $idx) | sort index 
    $idx = $idx2 
    } 
+0

क्षमा करें, मैंने पोस्ट की गई पहली स्क्रिप्ट सही नहीं थी। आप इसे शुरू करके परीक्षण कर सकते हैं, और फिर परिणाम देखने के लिए w32time सेवा को कुछ बार पुनरारंभ कर सकते हैं। – mjolinor

3

MSDN डॉक्स के अनुसार:

Get-WinEvent Windows Vista और Windows के बाद के संस्करणों चला रहे कंप्यूटर पर Get-EventLog cmdlet को बदलने के लिए बनाया गया है। Get-EventLog केवल क्लासिक ईवेंट लॉग में ईवेंट प्राप्त करता है। पिछली संगतता के लिए Get-EventLog विंडोज पावरशेल में बनाए रखा गया है।

और पूंछ के लिए मेरे अपने की जरूरत एक गैर -classic ईवेंट लॉग से प्रेरित (है कि एक ईवेंट लॉग नोव्यू मुमकिन हो सकता है?) यहाँ @mjolinor की शानदार संक्षिप्त कोड Get-WinEvent उपयोग करने के लिए पुनः प्रयोजन है:

  • डिफ़ॉल्ट रूप से इसके बारे में पिछले 10 लाइनों पता चलता है:

    Set-PSDebug -Strict 
    function Get-WinEventTail($LogName, $ShowExisting=10) { 
        if ($ShowExisting -gt 0) { 
         $data = Get-WinEvent -provider $LogName -max $ShowExisting 
         $data | sort RecordId 
         $idx = $data[0].RecordId 
        } 
        else { 
         $idx = (Get-WinEvent -provider $LogName -max 1).RecordId 
        } 
    
        while ($true) 
        { 
         start-sleep -Seconds 1 
         $idx2 = (Get-WinEvent -provider $LogName -max 1).RecordId 
         if ($idx2 -gt $idx) { 
          Get-WinEvent -provider $LogName -max ($idx2 - $idx) | sort RecordId 
         } 
         $idx = $idx2 
    
         # Any key to terminate; does NOT work in PowerShell ISE! 
         if ($Host.UI.RawUI.KeyAvailable) { return; } 
        } 
    } 
    

    मैं सुविधा के लिए कुछ घंटियां और सीटियां में जोड़ा शुरुआत में लॉग, फिर नई प्रविष्टियों को उनके साथ घटित करता है - आप ShowExisting पैरामीटर के माध्यम से किसी भी संख्या में इसे समायोजित कर सकते हैं।

  • पूंछ की आवश्यकता के प्राकृतिक क्रम के कारण यह सबसे पुराना पहले (Get-WinEvent के डिफ़ॉल्ट के विपरीत) रिकॉर्ड करता है।
  • आप समाप्त करने के लिए कोई भी कुंजी दबा सकते हैं (लेकिन PowerShellISE में नहीं)।
0

मैं ऊपर एक जवाब में कुछ त्रुटियों ...

Set-PSDebug -Strict 
function Get-WinEventTail($LogName, $ShowExisting=50) { 
    if ($ShowExisting -gt 0) { 
     $data = Get-WinEvent -provider $LogName -max $ShowExisting 
     $data | sort RecordId 
     $idx = $data[0].RecordId 
    } 
    else { 
     $idx = (Get-WinEvent -provider $LogName -max 1).RecordId 
    } 

    while ($true) 
    { 
     start-sleep -Seconds 1 
     $idx2 = (Get-WinEvent -provider $LogName -max 1).RecordId 
     if ($idx2 -gt $idx) { 
      $data = Get-WinEvent -provider $LogName -max ($idx2 - $idx + 1000) | where {$_.RecordId -gt $idx} | sort RecordId 
      $data 
      $idx = $data[-1].RecordId 
     } 

     # Any key to terminate; does NOT work in PowerShell ISE! 
     #if ($Host.UI.RawUI.KeyAvailable) { return; } 
    } 
} 
+0

यह एक सुझाए गए संपादन, या एक टिप्पणी, एक नया जवाब नहीं होना चाहिए। एक बार जब आप अधिक प्रतिष्ठा कमाते हैं तो आप इन चीजों को करने में सक्षम होंगे। – Chris

संबंधित मुद्दे