2016-04-11 9 views
2

私はWindows 7のイベントログで特定のエラーを監視する必要があります - これを行うには1つのライナーがありますか?'get-eventlog'のイベントを登録するには?

So:たとえば、「ディスク」エラーが発生しています。 (これは実際には別のポストからの答えです:Get-EventLog - easily filter by 'today'?

get-eventlog system -source "disk" -after ([datetime]::Today) 

をしかし、明らかに、私はどんなの上に保つために、これを実行し維持する必要がありますので、私のような何かを行うことによって、最新のイベントを取得することができますアラート。

答えて

2

ワンライナーはありません。ただし、の代わりに EventLogを使用すると、System.Diagnostic.EventLogクラスを使用し、Register-ObjectEventコマンドレットを使用して、EntryWrittenイベントに登録できます。ここで

私はコールバックでアプリケーションログとちょうど出力にメッセージを登録する例:

$eventLog = New-Object System.Diagnostics.EventLog "application" 
$eventLog.EnableRaisingEvents = $true 
$job = Register-ObjectEvent -InputObject $eventLog -EventName "EntryWritten" -Action { Write-Host ($eventArgs.Entry.Message) } 
Receive-Job $job 

あなたが今使用してコールバックをテストすることができます。

出力 testは意志
$eventLog.Source = "test" 
$eventLog.WriteEntry("test") 

コンソール。

+0

great:私はWORDを起動してこれをテストしました - そして、コンソールは起動するとすぐに物事でいっぱいになりました - これは私が手動でループする必要がなくなるので私の受け入れられた答えです(しかし私はRichard Slaterの答えのビットを盗みます:-) – monojohnny

1

それは厳密にワンライナーではないのですが、何を後にしていることtailにイベントログで、次のコマンドでのPowerShellでこれを行うことができます。

$lastCheck = [DateTime]::Now.Date 
while ($true) { 
    Get-EventLog System -Source "disk" -After $lastCheck -ErrorAction SilentlyContinue 
    $lastCheck = [DateTime]::Now.DateTime 
    Start-Sleep 1 
} 

あなたはこれを取る場合はさらに一歩とラップ

function Tail-EventLog ($source) { 
    $lastCheck = [DateTime]::Now.Date 
    while ($true) { 
    Get-EventLog System -Source $source -After $lastCheck -ErrorAction SilentlyContinue 
    $lastCheck = [DateTime]::Now.DateTime 
    Start-Sleep 1 
    } 
} 

あなたが実行することができます:

Tail-EventLog "disk" 
それが機能して、 はその後それはワンライナーとなり

PowerShell Profileにこれを入力して、いつでも利用できるようにすることができます。

+0

実際には、「Now.Date」を「Now.DateTime」に変更しました。これはうまくいくと思います。ありがとう! (したがって、この種のもののための 'Register-Event'タイプのコマンドレットはありませんか?) – monojohnny

+0

Oh:これの更新された関数バージョンのおかげです。 – monojohnny

+0

良い通話 - コピー貼り付けが失敗します! –

関連する問題