2

サーバーのリストを毎分監視し、指定されたイベントでトリガーする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はその役割を果たしており、「server1」からのイベントが画面に表示されているのを確認できますが、その後ロックされます。server1を終了したり、server2に移動したりすることはありません。

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

デバッグの場合、これはサーバー上でローカルに実行すると機能します。

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

-ComputerNameが導入されたときにカーソルが点滅し、リストの2番目のサーバーに移動しません。

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

4

1 に答える 1

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ミリ秒かかりました。

于 2012-05-01T16:08:16.953 に答える