【发布时间】:2021-06-01 17:19:43
【问题描述】:
- 如何知道是否记录了特定事件(给定事件 ID、时间和节点作为输入)? [在这种情况下,我知道只会记录一个事件]
- 如果记录了事件,我如何获取事件描述、日志名称等详细信息。
例如,我想在节点 Applications and Services Logs > Microsoft > Windows > groupPolicy > Operational 下查询一个事件,事件 id 为 5315,时间为当前时间。
【问题讨论】:
例如,我想在节点 Applications and Services Logs > Microsoft > Windows > groupPolicy > Operational 下查询一个事件,事件 id 为 5315,时间为当前时间。
【问题讨论】:
如果您要从新样式的 Windows 事件日志中查询事件,会有一些新变化。
System.Diagnostics.Eventing.Reader 命名空间中的类来读取新事件。EventLogQuery definition。EventReaders AD 组中包含的用户。此示例显示了一些新的访问方法:
string eventID = "5312";
string LogSource = "Microsoft-Windows-GroupPolicy/Operational";
string sQuery = "*[System/EventID=" + eventID + "]";
var elQuery = new EventLogQuery(LogSource, PathType.LogName, sQuery);
using (var elReader = new System.Diagnostics.Eventing.Reader.EventLogReader(elQuery))
{
List<EventRecord> eventList = new List<EventRecord>();
EventRecord eventInstance = elReader.ReadEvent();
try
{
for (null != eventInstance; eventInstance = elReader.ReadEvent())
{
//Access event properties here:
//eventInstance.LogName;
//eventInstance.ProviderName;
eventList.Add(eventInstance);
}
}
finally
{
if (eventInstance != null)
eventInstance.Dispose();
}
}
【讨论】:
elReader 应该包含在 using 语句中
您可以查询相关事件日志:
var sourceName = "MySource";
var el = new EventLog("Application");
var latestEntryTime = (from entry in el.Entries.Cast<EventLogEntry>()
where entry.Source == sourceName
&& // put other where clauses here...
orderby entry.TimeWritten descending
select entry).First();
但是,请注意,这种方法缓慢,因为Entries 集合往往很大。
【讨论】: