如何使用 EventLogQuery 查询 Eventdata?

How can I query the Eventdata using a EventLogQuery?

我正在尝试通过查看安全事件日志来确定最常使用的计算机。我正在考虑使用 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;
}

整理了您的查询,并使用说明找到了 "Account Name" 字段。希望这能回答您的问题。您可以应用 split/substring 方法真正找到该描述变量中的任何内容。它只是一个巨大的字符串 - 当您 select 一个日志时,您在事件日志 window 中看到的文本。