LastLogon и LastLogonTimestamp: дата последнего входа в привычном виде

powershell iconИспользуя Active Directory, системный администратор постоянно сталкивается с необходимостью получить и систематизировать информацию о пользователях. Сегодня поговорим о двух атрибутах учётных записей, которые показывают дату и время последнего входа. Это LastLogon и LastLogonTimestamp. Если вы используете модуль Active Directory для PowerShell, то, скорее всего, замечали необычные значения этих атрибутов. Сделаем так, чтобы значения этих атрибутов имели привычный нам вид даты и времени.

Напомню, для просмотра атрибутов учётных записей в Active Directory через PowerShell нужно, чтобы последний был не ниже второй версии, а в операционной системе должен присутствовать модуль Active Directory для PowerShell. В этом случае мы можем посмотреть время последнего входа в систему через LastLogon или LastLogonTimestamp. Лучше использовать последний. Дальше вы поймёте почему. А начнём с LastLogon.

Для просмотра даты и времени последнего входа можно использовать вот такую конструкцию:

Get-ADUser -SearchBase 'OU=Users,OU=Moscow,DC=Domain' -filter * -properties LastLogon | ft Name, LastLogon

Таким нехитрым способом мы посмотрели время последнего входа у пользователей, что располагаются в конкретном OU, и расположили их в виде таблицы. Не забудьте заменить значения OU и DC на ваши.

Обратите внимание на скриншот ниже. Дата и время на нём, мягко говоря, не совсем читабельные. А у некоторых пользователей их и вовсе нет.

LastLogon и LastLogonTimestamp: дата последнего входа в привычном виде

Что такое 132440351838433686? Это дата и время, записанные в системном формате. Он измеряется в тиках по 100 наносекунд, отсчёт которых идёт с 1 января 1601 года 00:00:00 UT. Давайте преобразуем эту запись в более привычный для нас формат:

Get-ADUser -SearchBase 'OU=Users,OU=Moscow,DC=Domain' -filter * -properties LastLogon | ft Name, @{n='LastLogon';e={[DateTime]::FromFileTime($_.LasLogon)}}

LastLogon и LastLogonTimestamp: дата последнего входа в привычном виде

Теперь читать дату и время намного удобнее. Если раньше у некоторых пользователей дата и время последнего входа отсутствовали вовсе, то теперь у таких пользователей мы видим дату 01.01.1601. Дата, конечно, не имеет ничего общего с реальностью. Но мы помним, что именно от неё начинает свой отсчёт системное время. К этой дате мы ещё вернёмся. А пока выгрузим полученную информацию в файл. Например, в CSV-файл. Для этого добавим ещё один элемент в наш конвейер.

Get-ADUser -SearchBase 'OU=Users,OU=Moscow,DC=Domain' -filter * -properties LastLogon | Select-Object Name, @{n='LastLogon';e={[DateTime]::FromFileTime($_.LastLogon)}} | Export-Csv "C:\LastLogon.csv" -Delimiter ";" -Encoding Unicode

LastLogon и LastLogonTimestamp: дата последнего входа в привычном виде

Путь сохранения файла, разделитель и кодировка — по вкусу.

Пытливый читатель, возможно, заметил, что здесь мы использовали Select-Object. FT тут работать не будет.

Ну а теперь о пустых значениях LastLogon у некоторых пользователей. И о том, почему лучше использовать LastLogonTimestamp. Дело в том, что LastLogon не реплицируется контроллерами домена, а LastLogonTimestamp реплицируется. Правда и тут может быть погрешность от 9 до 14 дней. Потому что именно в такие сроки контроллеры домена реплицируют атрибут LastLogonTimestamp. Сделано это для минимизации трафика. При каждой регистрации пользователя контроллер анализирует значение LastLogonTimestamp, затем контроллер выбирает случайное число между 9 и 14. Если число дней между событием последней регистрации и текущим моментом меньше выбранного числа, то контроллер не обновляет значение LastLogonTimestamp у этого пользователя.

Get-ADUser -SearchBase 'OU=Users,OU=Moscow,DC=Domain' -filter * -properties LastLogonTimestamp | ft Name, @{n='LastLogonTimestamp';e={[DateTime]::FromFileTime($_.LastLogonTimestamp)}}

LastLogon и LastLogonTimestamp: дата последнего входа в привычном виде

В этот раз дата и время последнего входа есть у всех пользователей. Но помните, что это не самые точные дата и время входа.

Напоследок приведу пример экспорта LastLogonTimestamp в CSV.

Get-ADUser -SearchBase 'OU=Users,OU=Moscow,DC=Domain' -filter * -properties LastLogonTimestamp | Select-Object Name, @{n='LastLogonTimestamp';e={[DateTime]::FromFileTime($_.LastLogonTimestamp)}} | Export-Csv "C:\LastLogonTimestamp.csv" ";" -Encoding Unicode

Теперь вы знаете как посмотреть дату последнего входа пользователя в PowerShell в удобном формате.

Добавить комментарий

Ваш адрес email не будет опубликован.