AD技术问询:能否重置过期密码时钟及取消永不过期后登录异常
关于AD密码过期相关问题的解答
问题1:能否在AD中重置过期密码的时钟?
完全可以!这里的“重置时钟”本质上就是更新用户的密码最后设置时间(pwdLastSet属性),让密码过期的倒计时重新从头开始。给你几个实用的操作方式:
- PowerShell(最推荐):用
Set-ADUser命令直接修改属性,精准又高效,而且不会强制用户立刻改密码(只要原密码符合当前策略):Set-ADUser -Identity "用户名/用户SamAccountName" -Replace @{PasswordLastSet=(Get-Date)} - AD用户和计算机图形界面:如果习惯用GUI,右键目标用户→「重置密码」,不过这个操作会让用户下次登录必须更改密码,适合不需要保留原密码的场景。
- ADSI Edit(进阶方式):打开ADSI Edit定位到用户对象,编辑
pwdLastSet属性,输入当前时间对应的文件时间戳(可以用PowerShell先获取:(Get-Date).ToFileTime()),不过一般没必要,PowerShell更省心。
问题2:取消「密码永不过期」后用户立即无法登录的问题
这个坑很多人都踩过!原因很简单:当用户被设为「password never expires」时,AD会暂停密码过期的计算,但**pwdLastSet属性还是保留着用户上次设置密码的原始时间**。一旦取消这个选项,AD会立刻校验这个时间和你的密码过期策略——如果原始时间已经超过了策略规定的过期天数,就会直接触发密码过期,导致用户没法登录。
解决步骤分两种情况:
提前预防(还没取消设置时)
- 先给用户重置密码过期时钟:用上面的PowerShell命令更新
PasswordLastSet为当前时间; - 再取消用户属性里的「password never expires」选项;
- 批量处理的话,可以用这个脚本一次性搞定所有目标用户:
# 筛选所有密码永不过期的用户,批量更新并取消设置 Get-ADUser -Filter {PasswordNeverExpires -eq $true} -Properties PasswordNeverExpires, PasswordLastSet | ForEach-Object { Set-ADUser -Identity $_.SamAccountName -Replace @{PasswordLastSet=(Get-Date)} Set-ADUser -Identity $_.SamAccountName -PasswordNeverExpires $false }
已经出现问题后的应急修复
如果已经取消设置导致用户登不上了:
- 先重新勾选用户的「password never expires」,让用户临时能登录;
- 重置该用户的密码过期时钟(用PowerShell或重置密码);
- 再次取消「password never expires」,这时候用户的密码过期倒计时已经重新开始,就不会再触发过期了。
之后你就可以引导用户通过自助凭证管理器来管理自己的密码啦。
内容的提问来源于stack exchange,提问作者John




