Администратор Active Directory должен периодически удалять неактивные объекты (пользователя, компьютеры) в базе Active Directory. В этой статье мы покажем, как узнать время последнего входа в домен пользователя AD и найти учетные записи, которые неактивны более 1 года.
Вы можете узнать время последнего входа пользователя в домен AD несколькими способами.
Как получить время входа пользователя в домен в консоли ADUC?
Вы можете узнать время последнего входа пользователя в систему из графической консоли ADUC (Active Directory Users and Computers).
- Запустите консоль dsa.msc;
- В верхнем меню включите пункт View -> Advanced Features;
- В дереве AD найдите пользователя (искать нужно вручную в OU, а не поиском) и откройте его свойства;
- Перейдите на вкладку Attribute Editor;
- В списке атрибутов найдите lastLogon – в этом атрибуте указано время последней входа (авторизации) в домене данного пользователя.
Время последнего входа пользователя из командной строки
Вы можете узнать время последнего входа пользователя в домен из командной строки с помощью net user и dsquery.
Откройте командную строку (не обязательно с правами администратора домена) и выполните команду:
net user administrator /domain| findstr "Last"
Вы получили время последнего входа данного пользователя.
Также вы можете получить время последнего входа с помощью dsquery. Например для учетной записи slpetrov:
dsquery * domainroot -filter "(&(objectCategory=Person)(objectClass=User)(sAMAccountName=slpetrov))" -attr distinguishedName lastLogon lastLogonTimestamp -limit 0
Главная проблема в том, что атрибуты lastLogon и lastLogonTimestamp в AD хранятся в формате timestamp и вам нужно дополнительно конвертировать его в нормальный формат времени.
Также вы можете использовать эту команду, чтобы найти всех пользователей, которые неактивны в течении, например, 10 недель:
dsquery user domainroot -inactive 10
Узнать время последнего входа пользователя с помощью PowerShell
Также вы можете использовать PowerShell для получения времени последнего входа пользователя в домен. Для этого вам понадобится модуль Active Directory для PowerShell. Установите данный модуль и импортируйте его в свою сессию PowerShell:
Import-Module ActiveDirectory
Чтобы получить время последнего входа пользователя administrator, выполните команду:
Get-ADUser -Identity administrator -Properties LastLogon
Командлет Get-ADUser вернул время в формате TimpStamp. Чтобы преобразовать его в нормальное время используйте такую команду:
Get-ADUser -Filter {Name -eq "Administrator"} -Properties * | Select-Object Name, @{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogon)}}
С помощью PowerShell вы можете вывести значение Lastlogon для всех пользователей домена:
Get-ADUser -filter {enabled -eq $true} -Properties * | Select-Object Name, @{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogon)}}|Sort-Object LastLogon -Descending
Или можно найти пользователей, которые неактивны более полугода (180 дней):
$date1= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonDate -Filter {LastLogonDate -lt $date1} | ft
1 comment
Неверно. Вы узнаете значение lastlogon, а не значение времени последнего входа в домен пользователя. Это две совсем разные задачи. Почитайте о действительных проблемах получения данных времени последнего входа, в частности, не осветили, а что такое lastlogon и lastlogonTimestamp и почему они могут различаться и при этом «в разную сторону». Насколько я помню, основная проблема, что этот параметр обрабатывает контроллер домена, и он не реплицируется на другие контроллеры. Как минимум, нужно опрашивать все контроллеры, и поднимать наиболее актуальные данные. Когда контроллеров много и они «живут», создаются, выводятся из домена, в том числе временно не доступны (находятся на обслуживании), получение данных последнего входа — это проблема, которая не решается легко.