Enable-ADAccount脚本偶因密码复杂度报错后恢复正常的原因排查
AD账户启用失败后自动恢复的问题排查
问题描述
我需要把所有samaccountname以指定后缀结尾的AD用户添加到多个AD组,脚本对大部分用户生效,但有一个用户例外。启用该用户时抛出错误:The password does not meet the length, complexity, or history requirement of the domain.,但该用户密码实际满足要求(8位以上,包含数字、大写字母、特殊字符)。这个账户创建于2天前,昨天自动化脚本执行失败,今早手动运行脚本时该账户成功启用。
疑问
- 为什么
Enable-ADAccount会先失败后成功? - AD是否存在启用限制?
- 为什么只有这个单个账户受影响?
- 是否账户需要创建满2天才能启用?
执行脚本
[string]$suffix = "<my-suffix>" [string[]]$AdmingGroups = @("group1","group2") [psobject[]]$AdminUsers = Get-ADUser -Filter * | ? { $_.samaccountname -match $suffix} | Select SamAccountName foreach ($User in $AdminUsers) { [string]$SamAccountName = $User.SamAccountName try { foreach ($ADGroup in $AdminGroups) { Add-ADGroupMember -Identity $ADGroup -Members $SamAccountName } Unlock-ADAccount -Identity $SamAccountName # This fails Enable-ADAccount -Identity $SamAccountName } catch { Write-Host "Failed to escalate AD Account $SamAccountName" # Print out the exception Write-Host $_ } }
可能的原因分析
- AD复制延迟:该账户创建时的密码策略相关属性还没同步到脚本连接的域控制器,昨天执行时触发错误;今天AD复制完成,所有DC同步了正确属性,启用成功。单个账户受影响是因为它的创建时间刚好卡在复制周期临界点,其他账户的复制已完成。
- 密码策略生效延迟配置:如果域里设置了“密码策略生效前的最短时间”为48小时(2天),新创建的账户在这段时间内无法启用,刚好匹配你遇到的时间点。默认这个值是0,需检查是否被修改过。
- 账户属性初始化异常:账户创建时可能出现临时的密码哈希同步不全等属性异常,昨天脚本执行时AD数据库里该账户的密码相关属性未完全初始化,导致校验失败;经过一段时间后AD后台完成属性整理,账户恢复正常。
- 域控制器负载波动:昨天脚本运行时目标DC负载过高,导致密码校验请求处理出错,返回错误提示;今天DC负载正常,校验流程顺利完成,启用成功。单个账户受影响可能是因为它是脚本最后处理的对象,此时DC负载达到峰值。
验证建议
- 检查域组策略中的密码策略生效前的最短时间(路径:计算机配置→Windows设置→安全设置→账户策略→密码策略),确认是否设置了大于0的值。
- 查看该账户的
pwdLastSet属性,对比创建时间,验证密码策略的时间限制是否匹配。 - 脚本中指定固定域控制器执行(比如
Get-ADUser -Server DC01),避免因随机连接不同DC导致的复制延迟问题。
内容的提问来源于stack exchange,提问作者Leshawn Rice
相关产品推荐
相关产品推荐

