В Windows Server 2003 / Windows XP в журнале событий системы можно было с легкостью отфильтровать события по учетной записи конкретного пользователя, указав в фильтре в поле User фильтра журнала имя нужной учетной записи. Но в Windows Server 2008 / Windows 7 и выше этот простой способ найти события, связанные с конкретным пользователем, не работает, хотя в настройках фильтра само поле User имеется (видимо осталось по-старинке).
В Windows Server 2008 в стандартном виде журнала событий отсутствует поле User. Попробуем добавить его с помощью меню View -> Add/Remove Columns.
Теперь в представлении журнала появился столбец User, но имени пользователя, инициатора события в этом столбце нет, вместо этого отображается N/A. Иформация об учетной записи теперь содержится внутри описания самого события ( в значениях атрибутов Security ID и Account Name в данном примере). Как же теперь можно отфильтровать события в журнале?
Для фильтрации событий по имени учетной записи пользователя ( и любым другим атрибутам событий), в Windows Server 2008 (и выше) можно воспользоваться возможность ручной модификации XML запросов (XPath) на выборку.
Итак, откройте нужный журнал в Event View (в нашем примере это журнал Security) и в контекстном меню выберите пункт Filter Current Log….
Перейдите на вкладку XML и отметьте чекбокс Edit query manually.
Скопируйте следующий код, позволяющий выбрать из журнала все события по конкретному пользователю (замените username на нужную учетку).
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">* [EventData[Data[@Name='subjectUsername']='username']]</Select>
</Query>
</QueryList>
Сохраняем изменения в фильтре и смотрим на журнал. В нем должны остаться события, относящиеся к данной учетке.
Если, к примеру, нужно дополнительно отфильтровать события по пользователю и Event ID 4624 (Удачный вход — An account was successfully logged on) и 4625 (неудачный вход — An account failed to log on.), фильтр XPath может выглядеть так:
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=4624 or EventID=4625)]]</Select>
<Select Path="Security">* [EventData[Data[@Name='subjectUsername']='username']]</Select>
</Query>
</QueryList>
Как-то странно реагирует. Да, фильтрует, но показывает записи только за сегодня.
Что делаю не так?
Работает) правильное написание EventData помогло.
А что с ним не так? Если в коде ошибка — присылайте, посмотрю и поправлю.
itpro приветствую!
Выборка из статьи по конкретному пользователю некорректно отрабатывает — отображаются события не
за все даты. Переделал запрос:
* [EventData[Data[@Name=’subjectUsername’] and (Data=’username’)]]
Выборка из статьи по конкретным событиям и конкретному пользователю некорректно отрабатывает — в
фильтр попадают другие события (помимо указанных 4624 и 4625) и пользователи. Переделал запрос:
*[System[(EventID=4624 or EventID=4625)]] and *[EventData[Data[@Name=’subjectUsername’] and (Data=’username’)]]
Добрый день.
Довольно странно… Я тестил эти запросы на Windows Server 2008 R2, возможно у вас что-то новее и там они отработывают по-другому.
itpro приветствую!
У меня работает только если username без точек. Например admin или user. Но так уж у нас заведено что username это первая буква имени, потом фамилия и потом город (сокращенно) . Например a.ivanov.msc И вот так вот не работает никак. Не смогли бы Вы поправить код? Server2008R2
Очень хочется видеть события в нормальных окошках а не в cmd.
Windows Server 2016 — вот такой фильтр работает без проблем. Специално добавил точку в имя пользователя.
<Select Path="Security">* [EventData[Data[@Name='subjectUsername']='a.adams']]</Select>
После выполнения данного скрипта, очистился журнал безопасности, остался только текущий день. Сброс фильтра не параметры по умолчанию не помог.
Вероятно вы по неосторожности ткнули в пункт меню очистки логов.
Тоже отображаются события не за все даты. Переделал запрос как у Дмитрия, стали отображаются события вроде за все даты, но только с кодами события: 4624, 4625, 4648… — Вход в систему. А мне надо события с кодом 4634 — Выход из системы?