3

我试图通过查看安全事件日志来确定最常使用的机器用户。我正在查看使用 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;
            }
4

1 回答 1

1

试试这个:

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;
}

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

于 2015-07-20T03:32:35.680 回答