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. Есть ли способ добавить фильтр для свойства внутри исходного запроса?
Вся помощь с благодарностью получена.