То, как Запросить для журнала событий, детализирует с данным идентификатором события?

  1. Как знать, зарегистрировано ли конкретное событие (данный идентификатор события, время и узел как исходные данные) или нет? [В этом случае я знаю, что только одно событие будет зарегистрировано]
  2. Если событие зарегистрировано, как я получаю детали как описание события, имя Журнала и т.д.

для, например, я хочу запросить для события в соответствии с Приложениями узла и Сервисными Журналами> Microsoft>, Windows> groupPolicy> Операционный, и идентификатор события 5315, и время является текущим временем.

10
задан Liam - Reinstate Monica 15 May 2019 в 10:15
поделиться

2 ответа

Есть несколько новых особенностей, если вы собираетесь запрашивать события из нового стиля журналов событий Windows.

  1. Вам нужно будет использовать классы из пространства имен System.Diagnostics.Eventing.Reader для чтения новых событий.
  2. Ваш запрос будет в форме Xpath, так что значение времени сложно, см. Msdn для определения EventLogQuery .
  3. Ваша программа столкнется с проблемами доступа, будьте готовы выдать себя за пользователя, который включен в группу EventReaders AD на машине ведения журнала.

В этом примере показаны некоторые новые методы доступа, ура.

        string eventID = "5312";
        string LogSource = "Microsoft-Windows-GroupPolicy/Operational";  
        string sQuery = "*[System/EventID=" + eventID + "]";

        var elQuery = new EventLogQuery(LogSource, PathType.LogName, sQuery);
        var elReader = new System.Diagnostics.Eventing.Reader.EventLogReader(elQuery);

        List<EventRecord> eventList = new List<EventRecord>();
        for (EventRecord eventInstance = elReader.ReadEvent();
            null != eventInstance; eventInstance = elReader.ReadEvent())
        {
            //Access event properties here:
            //eventInstance.LogName;
            //eventInstance.ProviderName;
            eventList.Add(eventInstance);
        }
19
ответ дан 3 December 2019 в 15:05
поделиться

Вы можете запросить соответствующий журнал событий:

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 имеет тенденцию быть довольно большой.

11
ответ дан 3 December 2019 в 15:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: