【问题标题】:How can I detect whether AD user password is expired without a second account to query AD?没有第二个账号查询AD,如何检测AD用户密码是否过期?
【发布时间】:2015-05-30 15:28:57
【问题描述】:

我创建了一个 (PowerShell) 向导来指导用户完成将其计算机(远程)加入域的过程。 该脚本在(标准)本地管理员的登录下运行,并使用相关用户的凭据查询 AD 并加入计算机(添加计算机)。 用户拥有一个或多个特定 AD 计算机帐户的明确权限,可以将该计算机加入域(他不是域管理员)。

一切正常,但对于新员工,密码设置为“用户下次登录时必须更改密码”。 每当我使用密码过期的用户凭据查询 AD 中的某些内容时,我总是会收到一般错误:“未知用户名或密码错误。”

如何从帐户本身(不使用任何其他帐户)确定密码已过期,以便提示更改密码?

这可能吗? (Windows 操作系统在登录时如何做到这一点?)

此问题与How can I query users with an expired password in Active Directory? 不同,因为在这种情况下,您有另一个帐户可用于查询 AD。

【问题讨论】:

标签: powershell passwords detect


【解决方案1】:

找到了,但此时无法测试 Get-ADUser $env:UserName -properties PasswordExpired, PasswordNeverExpires, PasswordLastSet

编辑:正如您所提到的,您无法查询 AD,因为您在不属于 AD 的本地管理员帐户下运行,并且您没有 AD 帐户来查询您正在测试的帐户的密码过期。

这似乎是设计使然,对于新员工,您需要设计一种方法让密码在一段时间后过期,而不是在首次登录时过期。

【讨论】:

  • 文森特,这正是我要找的。如上所述,向导在本地管理员帐户下运行,$env:UserName 无法登录,因为计算机尚未加入并且他的密码已过期。如果您执行Get-ADUser "User001" -Credential $User001Credential -properties PasswordExpired, PasswordNeverExpires, PasswordLastSet 之类的操作,您会得到 Get-ADUser : 目标名称不正确或服务器已拒绝客户端凭据。 当用户自己的密码设置为 “用户必须在下次登录时更改密码”
  • 我明白了,我猜当您使用 Get-Credential cmdlet 获取 $user001Credential 时,弹出窗口也不会查询 AD 来验证凭据(并通知到期)?
  • 不,据我所知,Get-Credential 根本不访问 AD。
  • 不确定您是否已经解决了这个问题,但是这个 SO 问题不会解决您的问题吗? stackoverflow.com/questions/10802850/…
  • 我想这是出于安全原因而设计的(有点道理,如果您无权访问 AD,您应该无法检索信息,例如您正在尝试的帐户打破实际存在)
猜你喜欢
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多