Eventlog Query - самый эффективный способ поиска

Я ищу в журналах событий на нескольких серверах событие 4768, которое имеет такой формат XML:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
     <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" />
     <EventID>4768</EventID>
     ....
 </System>
 <EventData>
     <Data Name="TargetUserName">USERID</Data>
     <Data Name="TargetDomainName">MYDOMAIN.LOCAL</Data>
    ....
     <Data Name="PreAuthType">2</Data>
     <Data Name="IpAddress">::ffff:172.1.1.1</Data>
     <Data Name="IpPort">53018</Data>
     <Data Name="CertIssuerName">
  </Data>
  <Data Name="CertSerialNumber">
  </Data>
  <Data Name="CertThumbprint">
  </Data>
 </EventData>
</Event>

Поэтому я запрашиваю журналы для конкретного TargetUserName используя C# как это:

 const string EventId = "4768";
 const string LogSource = "Security";
 string queryString = "*[System/EventID=" + EventId  + "]";

 EventLogQuery query = new EventLogQuery(LogSource, PathType.LogName, queryString) { Session = session };
  EventLogReader elReader = new EventLogReader(query);

 for (EventRecord eventInstance = elReader.ReadEvent();
                null != eventInstance;
                eventInstance = elReader.ReadEvent())
 {
     string userId = eventInstance.Properties[0].Value.ToString();

     if (userId == loginId)
     {
         //do stuff with eventInstance
     }
 }

Казалось бы, несколько неэффективно откатывать все события и затем фильтровать по TargetUserName, а не только по конкретному TargetUserName. Есть ли способ добавить фильтр для свойства внутри исходного запроса?

Вся помощь с благодарностью получена.

0 ответов

Другие вопросы по тегам