从事件日志中获取唯一事件及其计数

Get unique events from Event Log and their count

我有一个工作脚本可以提取 Windows 应用程序、安全、设置和系统日志的报告,这些日志仅显示过去 30 天内的关键事件和错误事件。但是,我也非常希望脚本能够计算过去 30 天内每个报告的严重或错误事件发生的次数。这是工作命令:

Get-EventLog Application -ComputerName $server -After $starttime |
    ? { $_.entryType -Match "Error" -and "Critical" } | 
    Sort-Object EventID -Unique |
    Select-Object TimeGenerated,EventID,Source,Message | 
    ft -AutoSize -Wrap | 
    Out-File $file -Append

这里是文本文件中的输出示例:

TimeGenerated       EventID Source                                      Message                                        
-------------       ------- ------                                      -------                                        
7/8/2016 1:23:20 PM       0 SQL Server Report Service                   Service cannot be started. Microsoft.ReportingS
                                                                    ervices.Diagnostics.Utilities.InternalCatalogEx
                                                                    ception: An internal error occurred on the repo
                                                                    rt server. See the error log for more details. 
                                                                       at Microsoft.ReportingServices.Library.Nativ
                                                                    e.GetSid(String name, Int32& length)           
                                                                       at Microsoft.ReportingServices.Library.Nativ
                                                                    e.NameToSid(String name)                       
                                                                       at Microsoft.ReportingServices.Library.Servi
                                                                    ceAppDomainController.StartRPCServer(Boolean fi
                                                                    rstTime)                                       
                                                                       at Microsoft.ReportingServices.Library.Servi
                                                                    ceAppDomainController.Start(Boolean firstTime) 
                                                                       at Microsoft.ReportingServices.NTService.Rep
                                                                    ortService.OnStart(String[] args)              
                                                                       at System.ServiceProcess.ServiceBase.Service
                                                                    QueuedMainCallback(Object state)               
7/8/2016 1:23:20 PM     121 Report Server Windows Service (MSSQLSERVER) The Remote Procedure Call (RPC) service failed 
                                                                    to start.                                      

如果在结果中有另一列显示指定时间段内每个 EventID 的出现次数,那就太好了。

你可以这样做(第 3 和 4 行是新的,CountSelect-Object 中)
从技术上讲,您还可以从 Sort-Object 中删除 -Unique,因为在对它们进行分组并仅通过该组的第一项后或多或少是相同的。

Get-EventLog Application -ComputerName $server -After $starttime | 
    ? { $_.entryType -Match "Error" -and "Critical" } |
    Group-Object -Property EventID |
    % { $_.Group[0] | Add-Member -PassThru -NotePropertyName Count -NotePropertyValue $_.Count } |
    Sort-Object EventID -Unique | 
    Select-Object Count, TimeGenerated, EventID, Source, Message | 
    ft -AutoSize -Wrap | 
    Out-File $file -Append