Как получить время последнего входа пользователя без каких-либо дополнительных модулей в powershell? - PullRequest
0 голосов
/ 07 сентября 2011

Могу ли я получить определенное время входа пользователя на сервер, не используя модули AD или дополнительные оснастки?

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

Вы можете использовать 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. Похоже, что для данных почти в реальном времени лучше всего использовать службу сбора журналов событий для сбора всех журналов событий безопасности контроллера домена в централизованную базу данных

1 голос
/ 07 сентября 2011

Лучший способ, который я бы предложил, - это проанализировать журнал событий, используя встроенные командлеты

Исследуйте либо Get-EventLog , либо Get-WinEvent

На локальном компьютере, что-то вроде этого скажет вам все случаи, когда пользователь "TBIRD" успешно вошел в систему

Get-EventLog Security | 
   where {$_.EntryType -match 'Success' 
     -and $_.Message -match 'An account was successfully logged on.'} | 
   where {$_.Message -match 'TBIRD'}

Я уверен, что более тщательный анализ доступных свойств позволит избежать анализа в поле «Сообщение», это всего лишь быстрый и грязный пример, который направит вас в правильном направлении

0 голосов
/ 17 января 2013

Вы можете положиться на lastLogonTimeStamp, только если вас интересует время входа в систему старше 15 дней.Похоже, что может быть интересно получить время последнего входа в систему, которое находится в течение последних 15 дней, и в этом случае lastLogonTimestamp не даст вам точных результатов.

В общем, правильный способ сделать этоэто запросить каждый DC в вашем домене для атрибута lastLogon, а затем сравнить все эти значения, чтобы узнать истинное время последнего входа пользователя в систему.Это единственный способ получить 100% точные результаты независимо от того, был ли последний вход в систему до или после 15 дней.

Вы можете написать скрипт , чтобы получить эти значения из всех контроллеров домена.а затем сравните их, чтобы определить истинный последний вход в систему для пользователя, или вы можете использовать True Report Logon Reporting Tool , чтобы автоматизировать процесс для вас.

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