2011-12-19 14 views
5

Próbuję użyć klasy EventLogQuery do wysłania zapytania do dziennika zdarzeń. Postępowałem zgodnie z przykładem pokazanym na http://msdn.microsoft.com/en-us/library/bb671200%28v=vs.90%29.aspx#Y0.Oczekiwano formatu czasu EventLogQuery?

Przeszukałem Google tonę, ale nie mogę znaleźć żadnych zapytań z @SystemTime, które nie są tam zakodowane.

Czy ktoś zna format DateTime, którego potrzebuję użyć do tego? Wszystko, co do tej pory próbowałem, zwróciło wyjątki "Nieprawidłowe zapytania".

Odpowiedz

12

EventLogQuery używa formatu XML do kwerendy dziennika zdarzeń. Możesz znaleźć schemat zapytania XML here.

Tekst Select element jest wyrażeniem XPath ocenianym względem serializacji XML zdarzeń.

Schemat dla zdarzenia XML here można znaleźć.

TimeCreated element ma atrybut SYSTEMTIME typu dateTime, więc format ten (w formacie XML zapytań) jest cokolwiek procesor XPath można analizować jako ważnego dateTime (zob 3.2.7.1. Lexical representation do specyfiki).

Na przykład można spróbować zapytać tak:

<QueryList> 
    <Query Id="0" Path="Application"> 
    <Select Path="Application">*[System[TimeCreated[@SystemTime = '2011-12-20T00:42:53.000000000Z']]]</Select> 
    </Query> 
</QueryList> 

Które Analizuje i zwraca wartość, jeśli zdarzy się, że zdarzenie stworzony dokładnie w podanej dacie i czasie.

Również funkcja dateDiff jest funkcją rozszerzenia do protokołu Filter XPath, która przyjmuje jeden lub dwa argumenty typu SYSTEMTIME i zwraca liczbę, więc po prostu użyj liczby w wyrażeniu z tą funkcją (tak jak w twoim przykładzie).


P.S. Można użyć Podglądu zdarzeń systemu Windows (%windir%\system32\eventvwr.msc), aby wejść i szybko ocenić XML zapytania wydarzenie przez creating Custom Views (Windows Vista, 7 i 2008 tylko):

enter image description here

+0

Dziękuję bardzo. Twoja odpowiedź była ratunkiem. – user1106686

+0

Cieszę się, że mogę pomóc. Proszę oznaczyć jako odpowiedź. –

+3

dzięki świetny post. Chciałbym tylko dodać, że akceptowany tu format daty to dtObj.ToString ("O").dtObj to twój początkowy obiekt datetime. – sunder

0

Event XML

Jest przykładem na XML z wersji strun oczekiwanego formatu daty.

<TimeCreated SystemTime="2006-02-28T21:51:44.754Z" /> 
+0

Doceniam pomoc. Czy mógłby mi pan podać przykład tego, jak powinien wyglądać ciąg formatu? – user1106686

+0

@ user1106686 Edytowałem swoją odpowiedź, aby uwzględnić wiersz z przykładu za pomocą datetime łańcucha. Mam nadzieję że to pomoże. – Bueller

1

Oto przykład C# dla inicjowania obiektu EventLogQuery że będzie wczytuj tylko wpisy zdarzeń z ostatniego dnia.

var yesterday = DateTime.UtcNow.AddDays(-1); 

var yesterdayDtFormatStr = yesterday.ToString(
    "yyyy-MM-ddTHH:mm:ss.fffffff00K", 
    CultureInfo.InvariantCulture 
); 

var query = string.Format(
    "*[System/TimeCreated/@SystemTime >='{0}']", 
    yesterdayDtFormatStr 
); 

var elq = new EventLogQuery("Application", PathType.LogName, query); 
1

Oto kolejny C# dla inicjowania obiektu EventLogQuery że będzie ładować aplecie zdarzeń dla określonego zakresu dat

var startTime = DateTime.Now.AddDays(-1); 
var endTime = DateTime.Now; 

var query = string.Format("*[System[TimeCreated[@SystemTime >= '{0}']]] and *[System[TimeCreated[@SystemTime <= '{1}']]]", 
    startTime.ToUniversalTime().ToString("o"), 
    endDate.ToUniversalTime().ToString("o")); 

var elq = new EventLogQuery("Applicaton", PathType.LogName, query); 
Powiązane problemy