16

powershell を使用して特定の Windows イベント ログを追跡するにはどうすればよいですか? 出来ますか?

4

3 に答える 3

13

私は時々これをしました:

$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
  }
于 2013-03-07T03:08:44.543 に答える
7

MSDN ドキュメントごと:

Get-WinEventGet-EventLogWindows Vista 以降のバージョンの Windows を実行しているコンピューター のコマンドレットを置き換えるように設計されています。Get-EventLog従来のイベント ログでのみイベントを取得します。Get-EventLog下位互換性のために Windows PowerShell に保持されます。

そして、非古典的なイベントログを追跡するという私自身の必要性に拍車をかけられました(それはイベントログのヌーボーパーチャンスでしょうか?)使用す​​るために転用された @mjolinor の素晴らしく簡潔なコードは次のとおりです Get-WinEvent

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-WinEventtail が必要とする自然な順序により、( のデフォルトとは逆に) 最も古いものから順にレコードをソートします。
  • 任意のキーを押して終了できます (PowerShellISE ではできません)。
于 2013-05-03T17:11:48.163 に答える