重启后如何从远程服务器中提取一系列失败的服务

时间:2010-07-08 19:10:24

标签: powershell windows-services wmi event-log

警告:当Get-WmiObject调用解析整个事件日志以匹配我指定的过滤器时,不会加入cpu。

情况:我正在编写一个远程运行某些检查的脚本,然后重新启动一台电脑。一旦服务器重新启动(睡眠一段时间后),我希望它检查健康状况,以确保应该启动的服务。我一直在运行“自动”服务,启动然后关闭(按预期),但是如果他们已经运行,那么我当前的版本会将它们选为失败。有人建议我检查事件日志中的“服务控制管理器”错误,并报告这些错误,现在唯一的问题是,使用下面的脚本,我们的服务器的事件日志范围可以从20K到几十万个事件,在20k的2k服务器上,这需要大约20秒才能完成,并且cpu在运行时固定在100%附近。

我还在学习powershell / wmi,所以任何建议都会受到赞赏。

function Check_Startup_Events {
    BEGIN {
        $time = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime((Get-Date).AddMinutes(-15))
    }
    PROCESS { 
        $results = Get-WmiObject Win32_NTLogEvent -computername $_ -Filter "LogFile='System' and SourceName='Service Control Manager' and TimeGenerated>='$time' and EventType=1" |
            Format-Table -Autosize EventCode, Message
        $results
    }

}

1 个答案:

答案 0 :(得分:0)

$results = Get-EventLog -ComputerName w2kserver -LogName System -After $time
foreach ($result in $results){
if ($result.Source -eq "Service Control Manager" -and $result.EntryType -eq "Error"){
Write-Host $_.Description}}

我针对我们环境中W2K服务器上的60k大事件日志运行此操作。它需要一段时间才能运行,但在本地运行并且不会对服务器征税。不知道你想如何输出数据,但我认为Get-EventLog会做你想要的。