首页 > 解决方案 > C# Linq - GroupBy - 从 Windows 事件日志中选择最常见/最常见的条目详细信息

问题描述

我是 C# 新手,但已成功使用 Linq 查询 Windows 事件日志,例如返回最后一小时的系统错误数。

但是,我还想过滤掉这些事件中最常见/最频繁的事件 - 并选择最新的事件。并从那里提取事件日志 ID、提供者名称、TimeCreated、计数/频率和消息。(这将用于记录到一个简单的文本文件。预期输出:

2021-04-23 07:00:00 - 08:00:00 COMPUTERNAME 系统错误 23 警告 11 信息 78 应用程序错误 0 警告 3 信息 7 Security_Count 411

最常见的错误类型:2021-04-23 07:00:00 - 08:00:00 COMPUTERNAME System Error Top Count:11 EventID:7 Source/ProviderName: Microsoft-Windows-NTFS 消息:bla bla bla

)

写入日志文件工作正常。我想不通的是如何使用 Linq 过滤掉这些数据

C#代码:

DateTime start = DateTime.Now.AddMilliseconds(-3600000);
DateTime end = DateTime.Now.AddMilliseconds(-1);

var evtlogresult = entries.Entries.Cast<EventLogEntry>()
                           .Where(

                           x => (

                               x.TimeWritten >= start
                               && x.TimeWritten <= end
                               && x.EntryType == EventLogEntryType.Error

                           ))
                           .Select(

                           x => (
                                               x.EventID,
                                               x.EntryType,
                                               x.Source,
                                               x.Message,
                                               x.TimeWritten,
                                               x.MachineName,
                                               x.Site,
                                               x.UserName

                       )).ToList();
                       

我已经在 PowerShell 中使用 group-object 完成了这项工作,我猜 Linq-groupBy 是一回事。

PowerShell 等价物:

$top_count = $evtlogresult | Group-Object EventID | 
    sort-object count -descending |
        Select-Object -ExpandProperty count -first 1

我错过了什么?有什么建议么?谢谢。

标签: c#windowslinqvisual-studio-2019event-log

解决方案


推荐阅读