从TaskScheduler事件日志中获取TaskName

时间:2011-12-21 22:06:22

标签: c# event-log etw

我正在尝试访问“事件查看器”中“详细信息”标签中提供的信息。

我已经意识到TaskScheduler事件不能通过System.Diagnostics.EventLog获得,而是通过System.Diagnostics.Eventing获得。

到目前为止,我已经得到了这个:

var query = new EventLogQuery("Microsoft-Windows-TaskScheduler/Operational", PathType.LogName);
var reader = new EventLogReader(query);
var eventRec = reader.ReadEvent();

但我无法在返回的对象中找到EventData。

我正在尝试查找此信息(Guid已删除),特别是“EventData-> TaskName”:

< Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
< System>
< Provider Name="Microsoft-Windows-TaskScheduler" Guid="...." /> 
< EventID>110</EventID> 
< Version>0</Version> 
< Level>4</Level> 
< Task>110</Task> 
< Opcode>0</Opcode> 
< Keywords>0x8000000000000000</Keywords> 
< TimeCreated SystemTime="2011-12-21T17:51:13.029864700Z" /> 
< EventRecordID>203307</EventRecordID> 
< Correlation ActivityID="{090...440}" /> 
< Execution ProcessID="996" ThreadID="9932" /> 
< Channel>Microsoft-Windows-TaskScheduler/Operational</Channel> 
< Computer>....</Computer> 
< Security UserID="S-1-5-18" /> 
< /System>
< EventData Name="TaskRunEvent">
**< Data Name="TaskName">\testTask</Data>** 
< Data Name="InstanceId">{090...440}</Data> 
< Data Name="UserContext">cussonsh</Data> 
< /EventData>      < /Event>

1 个答案:

答案 0 :(得分:1)

EventData位于EventRecord.Properties。即在你的情况下,它将是eventRec.Properties。

但是那些属性是IList,而EventProperty类只有一个值字段,而不是名称。而且我不确定你怎么能找回它... 但您仍然可以使用EventRecord.ToXml()方法获取XML表示(与您显示的完全一样),然后从该XML中检索名称/值。