Powershell 监视windows甚至日志

Powershell 监视windows甚至日志,powershell,Powershell,当前,我的脚本查看事件日志,查找HP Smart Array的条目,然后操作是发送包含该消息的电子邮件。问题是,如果它在事件日志中检测到与此描述匹配的条目,则它将从日志中的第一个事件返回消息,这通常是完全不相关的。是否有人可以建议如何将该消息设置为HP Smart array条目的消息 foreach ($server in $servers) { $event = Get-EventLog -ComputerName $server -LogName "system" -Newest

当前,我的脚本查看事件日志,查找HP Smart Array的条目,然后操作是发送包含该消息的电子邮件。问题是,如果它在事件日志中检测到与此描述匹配的条目,则它将从日志中的第一个事件返回消息,这通常是完全不相关的。是否有人可以建议如何将该消息设置为HP Smart array条目的消息

foreach ($server in $servers) {
    $event = Get-EventLog -ComputerName $server -LogName "system" -Newest 200

    if ($event.Source.Contains("HP Smart Array") -or $event.Source.Contains("disk")) {
        $body += Write-Output "Server $server has an error: " $($event.Message -split '\n')[0]  `n
    } else { 
        $body += Write-Output "Server $server has nothing to report           `n"
    }     
}

问题在于你的if语句。它将进行检查,直到第一个条目匹配为止。你需要循环你所有的事件。将代码更改为:

foreach ($server in $servers) {
    $events = Get-EventLog -ComputerName $server -LogName "system" -Newest 200

    foreach ($event in $events) {
        if ($event.Source.Contains("HP Smart Array") -or $event.Source.Contains("disk")) {
            $Message += Write-Output "Server $server has an error: " $($event.Message -split '\n')[0]  `n
        }  
    }
    if ($null -eq $Message) {
        $Message = Write-Output "Server $server has nothing to report           `n"
    }
    $body += $Message   
}

我怀疑这会产生合理的结果。每个源不同于“HP Smart Arrray”且不包含“磁盘”的事件都会导致“服务器…无需报告”。所以你可能会得到200次“无需报告”。我不喜欢这样。这真的很好。谢谢大家,有一个问题是有一种方法可以限制每台服务器的一个响应,因为现在我们可能从一台服务器获得多达200行的响应