检索 AD 用户的最后登录信息有助于管理员识别不活跃的用户帐户、跟踪用户登录历史并检测异常的用户登录模式。虽然管理员可以使用 PowerShell 来完成此操作,但 Active Directory 存储登录数据的方法存在独特的挑战,因为有多个属性:LastLogon、LastLogonDate 和 LastLogonTimestamp,每个属性都有其用途和限制。本文将探讨如何有效使用 PowerShell 获取 AD 最后登录信息,并介绍如何使用 AD last logon reports 在 ADManager Plus 中轻松检索这些信息,AD reporting tool。
下表比较了使用 PowerShell 和 ADManager Plus 查找 AD 用户最后登录值的方法。
开始之前,请确保:
要使用 PowerShell 获取 AD 用户的最后登录信息,请以管理员身份打开 Windows PowerShell 并执行以下脚本:
Get-ADUser -Filter * -Properties LastLogonTimestamp
要使用 lastLogon 属性获取 AD 用户的最后登录信息,请使用以下脚本:
Get-ADUser -Identity "John" -Properties LastLogon | Select-Object Name, lastLogon
要使用 lastLogon 属性获取 AD 用户的最后登录信息,请使用以下脚本:
Get-ADUser -Identity "John" -Properties LastLogonDate | Select-Object Name, lastLogonDate
使用 ADManager Plus 查找 AD 用户最后登录值的方法:
以下是一些变体和实际用例:
要获取单个用户的最后登录时间,需要在 PowerShell 中查询 LastLogonTimeStamp 属性,并将其从原始 FileTime 格式转换为可读日期。
Get-ADUser -Identity "John" -Properties LastLogonTimeStamp | Select-Object Name, @{Name='LastLogon';Expression={[datetime]::FromFileTime($_.LastLogonTimeStamp)}}
此脚本查找过去 90 天内未登录的所有用户:
$inactiveDays = 90
$cutoffDate = (Get-Date).AddDays(-$inactiveDays)
# Convert the cutoff date to FileTime format for the AD filter
$cutoffFileTime = $cutoffDate.ToFileTime()
Get-ADUser -Filter "LastLogonTimeStamp -lt '$cutoffFileTime'" -Properties LastLogonTimeStamp, EmailAddress | Select-Object Name, SamAccountName, EmailAddress, @{Name='LastLogon';Expression={[datetime]::FromFileTime($_.LastLogonTimeStamp)}}
由于 LastLogon 属性不进行复制,获取绝对最新登录时间的唯一方法是查询每个 DC 并找到最新值。此脚本较为高级,但提供最高准确性。
$userName = "jdoe"
$latestLogon = $null
$logonDC = ""
$domainControllers = Get-ADDomainController -Filter *
foreach ($dc in $domainControllers) {
$user = Get-ADUser -Identity $userName -Server $dc.HostName -Properties LastLogon
if ($user.LastLogon -gt 0) {
$currentLogon = [datetime]::FromFileTime($user.LastLogon)
if ($currentLogon -gt $latestLogon) {
$latestLogon = $currentLogon
$logonDC = $dc.HostName
}
}
}
Write-Host "User: $userName"
Write-Host "Most recent logon: $latestLogon on DC: $logonDC"
虽然可以使用 PowerShell 获取用户的最后登录详情,但存在多个限制。
ADManager Plus 是一款全面的 AD reporting solution,帮助管理员克服 PowerShell 的限制,轻松生成 AD 用户报告。
你可以使用 [datetime]::FromFileTime() 方法转换原始 FileTime 值。例如:
@{Name='LastLogon';Expression={[datetime]::FromFileTime($_.LastLogonTimeStamp)}}.
AD 本身不在用户对象上存储最后登录计算机信息。这是一个复杂的任务,需要编写脚本、在所有 DC 上拥有适当权限,并且在大型环境中可能较慢。要使用 PowerShell 查找此信息,必须查询所有 DC 的安全事件日志。
至少需要对 AD 中的用户对象具有读取权限才能获取用户的最后登录详情。查询多个 DC 时,确保你的账户能够认证到每个 DC。