Вы можете использовать ADSI. Это встроенный в Framework .NET 2.0, поэтому нет оснастки, нет модуля.
И получить атрибут lastLogon
(отредактированный или лучше lastLoginTimestamp
)
$dn = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://SRVA.dom.fr/dc=dom,dc=fr","administrateur@dom.fr","admin")
# Look for a user
$Rech = new-object System.DirectoryServices.DirectorySearcher($dn)
$Rech.filter = "((userPrincipalName=phocquet@dom.fr))"
$Rech.SearchScope = "subtree"
$Rech.PropertiesToLoad.Add("distinguishedName");
$Rech.PropertiesToLoad.Add("sAMAccountName");
$Rech.PropertiesToLoad.Add("lastLogon");
$liste = $Rech.FindOne()
(Edited)
@Chritian прав, вам лучше использовать lastLoginTimestamp
, а не lastLogin
, поскольку lastLogin
не реплицируется на контроллеры домена Active Directory, поэтому, если у вас есть несколько контроллеров домена, аутентификация пользователя по lastLogin
будет обновляться только на текущий сервер аутентификации, в то время как lastLoginTimestamp
будет реплицироваться на все контроллеры домена. Подробнее об этом см. «Атрибут LastLogonTimeStamp» - «Для чего он был разработан и как он работает» . Это объясняет, что lastLoginTimestamp
не обновляется при каждом входе в систему, но он точен только на 9-14 дат (может быть параметризован), он больше помогает идентифицировать неактивные учетные записи компьютеров и пользователей.
Если вы ищете отслеживание входа в систему в режиме реального времени, вам потребуется запросить журнал событий безопасности на контроллере домена для получения требуемых событий входа в систему, т. Е. 528 - Windows XP \ 2003 и более ранние версии или 4624 Windows Vista \ 2008. Похоже, что для данных почти в реальном времени лучше всего использовать службу сбора журналов событий для сбора всех журналов событий безопасности контроллера домена в централизованную базу данных