2012-05-01 50 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正在做它的工作,我可以看到来自“server1”的事件填充屏幕,但然后它锁定。它永远不会退出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