首页 > 解决方案 > Set-ADuser 和“用户下次登录时必须更改密码”的问题

问题描述

:) 我有个问题。我正在学习 powershell 并编写初始脚本。我想编写一个脚本来检查用户是否在域中。然后我希望这个用户帐户检查“用户下次登录时必须更改密码”,同时我想稍后取消选中。如果用户不在域中,我希望显示一条消息,说明 AD 中没有帐户。

我编写了以下不太工作的脚本....虽然脚本在 AD 中找到正确输入的帐户没有任何问题,但如果它输入了不正确的登录名,我收到消息“Set-ADUser:找不到具有身份的对象:DC = xx,DC = xx中的“测试”。如果输入的登录名不正确,这不是我希望看到的。问题是否是一个写得不好的 if 语句?

谢谢您的帮助。

查看我的代码:

$User = Read-Host "Enter user login: "
if($User)
{
    Write-Verbose "Searching user..." -Verbose
    Set-ADUser -Identity $User -ChangePasswordAtLogon $true

    if($true)
    {
    Set-ADUser -Identity $User -ChangePasswordAtLogon $false
   
    get-aduser -identity $User -properties * | 
    select accountexpirationdate, accountexpires, accountlockouttime, badlogoncount, padpwdcount, lastbadpasswordattempt, lastlogondate, lockedout, passwordexpired, passwordlastset, pwdlastset | 
    format-list

    Write-Verbose "Password extended!" -Verbose
    }
}

else
{
     echo "User doesn't exist!"
}pause

标签: powershell

解决方案


您可以使用带有异常消息的“Try/Catch”以避免在 AD 中不存在用户帐户的情况下引发错误。

$User = Read-Host "Enter user login"

If ($User)
{
    Write-Host "Searching User $User..."

    Try
    {
        Get-ADUser -Identity $User
        Set-ADUser -Identity $User -ChangePasswordAtLogon $True
    }
    Catch [Microsoft.ActiveDirectory.Management.ADIdentityResolutionException]
    {
        Write-Host "User account $User does not exist."
    }
}
Else
{
    Write-Host "Username is empty."
}

此外,您不必稍后取消选中“下次登录时必须更改密码”,因为您仅在用户存在时才检查它。


推荐阅读