我可以成功使用 Powershell 来判断用户是否在 Active Directory 中进行了身份验证:
Function Test-ADAuthentication {
param($username,$password)
(new-object directoryservices.directoryentry "",$username,$password).psbase.name -ne $null
}
Test-ADAuthentication "test" "Password1"
然而,我无论如何也想不出如何:
- 检查是否需要重置密码,同时
- 验证发送的凭证确实对他们的上一个密码有效。
该怎么办呢?
答案1
可以通过运行进程来测试凭证。以下是示例:
Start-Process -FilePath cmd.exe /c -Credential (Get-Credential -UserName $username -Message 'Test Credential')
或者简单来说:
Start-Process -FilePath cmd.exe /c -Credential (Get-Credential)
您将看到一个输入密码的提示。如果您需要从字符串中读取密码(不好的做法),则需要事先初始化凭证对象。有关该方法的更多详细信息,请参阅帮助。
Get-Help Get-Credential
答案2
以下是获取特定用户密码过期前剩余天数的一种方法:
(([datetime]::FromFileTime((Get-ADUser user -Properties "msDS-UserPasswordExpiryTimeComputed")."msDS-UserPasswordExpiryTimeComputed")) - (Get-Date)).TotalDays
如果数字为 0 或负数,则密码已过期。
此命令将检查用户帐户是否被锁定:
(Get-ADUser user -Properties LockedOut).LockedOut
至于第二个问题 - 如果我理解正确的话,您想查看他们当前输入的密码是否与之前使用的密码相同。
据我所知,这是不可能的 - 通过某些策略,AD 可以保留以前的密码记录,但这些密码不会暴露给外部访问。