2013-03-07 5 views

答えて

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コマンドレットを置き換えるために設計されています。 Get-EventLogは、クラシックイベントログでのみイベントを取得します。 Get-EventLogは、後方互換性のためにWindows PowerShellに保持される です。

とテールに私自身の必要性 -classicイベントログでの拍車をかけたが(それはイベントログヌーボー恐らくでしょうか?)ここGet-WinEventを使用するために再利用@mjolinorの素晴らしく簡潔なコードです:

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; } 
    } 
} 

私は便宜のために、いくつかの添えものに追加:

  • をデフォルトでは、それは最後の10行を表示最初にログを作成し、次に新しいエントリを連結します。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

関連する問題