2012-05-01 13 views
2

毎分サーバーの一覧を監視し、指定されたイベントでトリガーするPowerShellスクリプトを作成しています。私のスクリプトは完了していませんが、これはこれまでのところです。PowerShell:毎分複数のサーバーイベントログを監視します。

$TimeAgo = (Get-Date).addMinutes(-1) 
$servers = "server1","server2","server3","server4" 

foreach ($server in $servers) 
{ 
    $events = Get-EventLog application -computername $server -after $TimeAgo 

    foreach ($event in $events) 
    { 
     $event 
    } 
} 

foreachのはそれが仕事だやっている、私が画面を埋める「サーバー1」からのイベントを見ることができますが、それがロックアップします。これは決してserver1を終了せず、決してserver2に移動しません。

何が起こっているかについてのアイデアはありますか?デバッグのために

が、これは私がサーバー上でローカルに実行した場合に動作します:

$TimeAgo = (Get-Date).addMinutes(-1) 
Get-EventLog application -after $TimeAgo 

-ComputerNameは私が点滅するカーソルを取得し、それがリストの2番目のサーバーに移動していないことを紹介されたときにです。

編集:動作しています。最初のサーバーを完了するのに約6-7分かかります。毎分スキャンしたい場合、これは理想的ではありません。

答えて

3

-newestパラメータを使用して、新しいイベントの結果を確認してください。 -afterパラメータは、ログ全体を解析します。比較のためにmeasure-commandで時間をテストすることができます。

measure-command {get-eventlog application -comp server1 -after (get-date).addminutes(-1))} 
measure-command {get-eventlog application -comp server1 -newest 1} 

リモートサーバー上では、-afterは45秒、-newestは195ミリ秒かかりました。

+0

これは私が今やっていることです。私は、-newest 50を使用しています。次に、if文を使用して、TimeGeneratedイベントが最後の60秒以内かどうかを確認しています。ありがとう! – Pat

関連する問題