c# - 如何使用 EventLogQuery 查询 Eventdata?

标签 c# readeventlog

我试图通过查看安全事件日志来确定机器的最频繁用户。我正在考虑使用 4624 事件 ID,但我似乎无法弄清楚如何从查询中的 EventData 添加任何内容。我可以从 4624 事件中获取标准数据,但我要查询的是登录类型也为 7 的事件,然后能够读取目标用户名详细信息。

谢谢!

            string query = @"*[System/EventID=4624]";

            EventLogQuery eventsQuery = new EventLogQuery("Security", PathType.LogName, query);

            try
            {
                EventLogReader logReader = new EventLogReader(eventsQuery);

                for (EventRecord eventdetail = logReader.ReadEvent(); eventdetail != null; eventdetail = logReader.ReadEvent())
                {
                    Console.WriteLine(eventdetail.ProcessId);
                }
            }
            catch (EventLogNotFoundException)
            {
                Console.WriteLine("Error while reading the event logs");
                return;
            }

最佳答案

试试这个:

string query = @
"*[EventData[Data[@Name='LogonType']='7'] and System[(EventID='4624')]]";

EventLogQuery eventsQuery = new EventLogQuery("Security", PathType.LogName, query);

try {
    EventLogReader logReader = new EventLogReader(eventsQuery);

    for (EventRecord eventdetail = logReader.ReadEvent(); eventdetail != null; eventdetail = logReader.ReadEvent()) {
        string description = eventdetail.FormatDescription();
        string usernametemp = description.Substring(description.IndexOf("Account Name:") + ("Account Name:").Length + 2);
        string username = usernametemp.Substring(0, usernametemp.IndexOf("\r"));
    }
} catch (EventLogNotFoundException) {
    Console.WriteLine("Error while reading the event logs");
    return;
}

整理您的查询,并使用说明找到“帐户名称”字段。希望这能回答您的问题。您可以应用该拆分/子字符串方法来真正找到该描述变量中的任何内容。它只是一个巨大的字符串 - 选择日志时您在事件日志窗口中看到的文本。

关于c# - 如何使用 EventLogQuery 查询 Eventdata?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31507803/

相关文章:

c# - WPF richtextbox 上的多语言拼写检查

c# - string.Empty vs null。你用哪个?

c# - Unity 中出现此错误 "Download over http ,please consider updating to https"的任何永久解决方案?

c# - 在 C# 中唯一标识事件日志条目

c# - 使用 StreamReader 检查文件是否包含字符串

c# - 如何获取要在DbContext c#中创建的下一个实体的主键(id)

c++ - 您如何以编程方式检测 Windows 上的蓝屏死机在重启后刚刚发生?

ruby-on-rails - 在 Rails 应用程序中记录搜索结果

event-log - 如何在没有 EventMessageFile 的情况下读取 Windows 事件日志?