Связанные события входа в систему и выхода из системы в Windows с использованием класса Win32_NTLogEvent - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь получить события входа и выхода из класса Win32_NTLogEvent .Для этого я использую следующий WMI-запрос:

PATH Win32_NTLogEvent WHERE "(EventIdentifier = 4648 OR EventIdentifier = 4647 OR EventIdentifier = 4634) And TimeGenerated > '201811010000'" GET /ALL

Запрос работает нормально и в ответ выдает все соответствующие входы и выходы из системы.Проблема в том, как я могу связать оба события?Я имею в виду, как я могу связать, какой выход из системы связан с каким-либо событием входа?

Анализ (не очень понятной) документации для событий 4648 (попытка входа) и 4634 (учетная запись была отключена), похоже, что оба имеют связанный идентификатор, учитывая SubjectLogonId для события 4648 и TargetLogonId для события 4634.

Учитывая эту информацию, я анализирую возвращеннуюсобытия, получение идентификаторов из InsertionStrings и попытка найти связанные идентификаторы, но я не нашел ни одного.

Я что-то неправильно понял или ищу неверную информацию?

Я протестировал его в Windows 10, а также в Windows Server 2012, но я ищу что-то, что работает в максимально возможном количестве версий.

Некоторый фон:

Короче говоря, я хочузнать время входа / выхода и продолжительность сеанса для определенных дат.Я смог получить время входа и выхода для конкретного пользователя, используя следующий запрос WMI ( Win32_NetworkLoginProfile класс):

PATH Win32_NetworkLoginProfile WHERE "Name='DOMAIN\\user'" GET LastLogon, LastLogoff

Мое намерение с первым запросомэто почти то же самое, но я хочу, чтобы информация для всех пользователей без знания каждого имени пользователя.Мое лучшее предположение - использование класса Win32_NTLogEvent, как описано, но это не обязательно.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

В Windows Vista (или Windows Server 2008) и выше эта команда PowerShell должна сделать трюк

Get-WmiObject -Query "select Name, LastLogon, LastLogoff from Win32_NetworkLoginProfile WHERE {your logic here}"

Однако, если вы хотите использовать класс Win32_NTLogEvent, который поддерживает Windows XP, я думаю, что это невозможноиз-за двух причин

  1. EventIdentifier в этом классе указывает метаданные о типах событий, которые могут быть 1-5, что означает: Ошибка, Предупреждение, Информация, Успех аудита безопасности иОшибка аудита безопасности.И вы должны взглянуть на EventCode, что приводит меня ко второй точке:

  2. Два события из одного источника могут иметь одно и то же значение для этого свойства, но могут иметь разные значения серьезности и EventIdentifier.Например, успешный выход из системы регистрируется в журнале безопасности с идентификатором события 538. Однако идентификаторы события не обязательно являются уникальными.Возможно, что при получении идентификатора события 538 вы можете получить другие виды событий с идентификатором 538. В этом случае вам может потребоваться выполнить фильтрацию по источнику, а также по идентификатору.

и, наконец, как вы могли заметить, аудит событий (например, 4648, 4647) поддерживает Windows 10 (или Windows Server 2016)

0 голосов
/ 02 января 2019

Вы пытаетесь использовать попытку входа в систему 4648.Это событие указывает только на то, что была предпринята попытка и была ли она успешной.

Событие, которое вы должны искать: 4624 «Учетная запись успешно вошла.», И Logon ID для этого события будет соответствовать Logon ID для 4634 «AnУчетная запись вышла из системы. "

Чтобы прокомментировать свой фоновый оператор" LastLogon, LastLogoff ", эти значения обновляются в активном каталоге при каждом входе или выходе из системы, но история не сохраняется.

Я знаю, что интерфейс WBEM существует со времен Windows XP, я не могу найти доказательств того, что ваши запросы PowerShell будут работать на этой платформе, однако они должны работать без изменений в Windows 7+ и Server 2008+.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...