Active Directory是否存储用户最后登录信息?时间戳转换及信息获取咨询
问题解答
1. lastLogon字段的含义
lastLogon字段记录的是计算机账户本身的最后域认证时间(即这台电脑上次连接域控制器的时间),并非用户在该计算机上的最后登录时间。
需区分AD计算机对象中几个时间字段的差异:
lastLogon:仅在计算机登录的那台域控制器上更新,不会同步到其他DC,是单DC上最精准的登录时间,但要获取全局最新值需遍历所有DClastLogonTimestamp:会同步到所有域控制器,默认每14天更新一次(可调整),是近似的全局登录时间,精度稍低但无需查询所有DCLastLogonDate:Get-ADComputer返回的自动格式化可读时间,本质是lastLogonTimestamp的转换结果
2. 转换lastLogon数值为可读时间
lastLogon的数值是Windows文件时间格式(从1601年1月1日开始的100纳秒间隔数),用PowerShell可直接转换:
[DateTime]::FromFileTime(133541980705291112)
执行后会返回对应本地时间,示例数值转换结果为2024年2月29日 4:26:29(和LastLogonDate有差异,因为lastLogon是单DC的最新值,LastLogonDate来自同步的lastLogonTimestamp)
3. AD中是否有比SCCM更新的用户登录信息
AD本身不会直接存储用户在某台特定计算机上的最后登录时间,仅能记录:
- 用户账户的域登录时间(存在用户AD对象的
lastLogon/lastLogonTimestamp字段) - 计算机账户的域认证时间(即你查询到的这些字段)
若要获取用户在丢失计算机上的最后登录信息,AD无法直接提供,可尝试:
- 若计算机仍联网,用管理员权限远程读取其本地事件日志,查看事件ID 4624(用户登录成功)的记录
- 若计算机已离线,SCCM的历史记录可能是唯一可用来源,除非之前有其他日志工具同步过该电脑的登录日志
另外,若要获取用户最新的域登录时间,可查询用户AD对象的lastLogon字段(需遍历所有域控制器找最大值),该信息通常比SCCM更及时,因为AD会实时更新。查询命令示例:
Get-ADUser -Identity "用户名" -Properties lastLogon, lastLogonTimestamp | Select-Object Name, @{Name="LastLogon"; Expression={[DateTime]::FromFileTime($_.lastLogon)}}, @{Name="LastLogonTimestamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}}
内容的提问来源于stack exchange,提问作者Skyvokk Ivan
相关产品推荐
相关产品推荐

