如何查询Active Directory中用户账户的禁用日期及相关属性问题?
如何确定Active Directory账户的禁用时间?
刚好之前处理过不少AD账户管理的需求,来给你梳理下这些问题的答案:
1. 启用/禁用AD账户会触发last_modified(AD中实际为lastModified)属性变更吗?
答案是肯定的。当你启用或禁用AD账户时,本质是修改了账户的userAccountControl属性(禁用时会添加ACCOUNTDISABLE标识,对应数值2),这类账户状态的变更会直接触发lastModified和whenChanged这两个属性更新,记录对象的最后修改时间。
2. 还有哪些操作会导致lastModified属性变更?
lastModified是AD对象的通用修改时间戳,只要对账户对象做了任何属性修改,都会更新这个值,常见场景包括:
- 修改账户的基本信息(姓名、邮箱、部门、电话等)
- 重置或更改账户密码
- 添加/移除账户所属的安全组/分发组
- 调整账户的登录时间限制、允许登录的工作站列表
- 设置或修改账户的过期时间
- 解锁被锁定的账户
- 修改账户的权限或委派设置
3. 确定账户禁用时间的可靠方法
方法一:通过AD属性初步判断(无审核日志时的折中方案)
如果你的AD环境没有开启审核日志,可以先通过PowerShell查询账户的lastModified、whenChanged和账户状态,作为参考:
# 替换"TargetUser"为你要查询的账户名或SamAccountName Get-ADUser -Identity "TargetUser" -Properties lastModified, userAccountControl, whenChanged | Select-Object Name, SamAccountName, lastModified, whenChanged, @{Name="AccountStatus"; Expression={if ($_.userAccountControl -band 2) {"已禁用"} else {"已启用"}}}
注意:如果账户被禁用后又有其他属性修改,
lastModified会被更新为后续操作的时间,此时这个值就不再是禁用时间了,只能作为大致参考。
方法二:借助AD审核日志(最可靠的方式)
要精准获取账户的禁用时间,最稳妥的是开启AD的账户管理审核策略,然后通过事件日志查询具体的禁用操作:
- 启用审核策略:在组策略编辑器(
gpedit.msc)中,导航到计算机配置->Windows设置->安全设置->本地策略->审核策略,将「审核账户管理」设置为「成功」和「失败」,然后更新组策略(gpupdate /force)。 - 查询禁用事件:账户被禁用时,AD会在安全日志中记录事件ID为
4725的事件,包含精确的操作时间、执行操作的账户等信息。用PowerShell可以快速筛选目标账户的禁用事件:
# 替换"TargetUser"为目标账户的SamAccountName Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4725} | Where-Object {$_.Properties[0].Value -eq "TargetUser"} | Select-Object TimeCreated, Message
这条命令会返回所有该账户被禁用的事件记录,TimeCreated就是准确的禁用时间,Message里会显示更多细节比如操作执行者。
内容的提问来源于stack exchange,提问作者Hamza Oukili




