【问题标题】:Active Directory - Reset User Password using User Principal Name in PowerShellActive Directory - 在 PowerShell 中使用用户主体名称重置用户密码
【发布时间】:2021-10-09 23:55:32
【问题描述】:

甚至不确定这是否可能?有没有办法只使用用户主体名称来重置用户的 AD 密码。通常,我必须依靠他们的 AD 用户名。

他们的 UPN 与他们的电子邮件地址相同,这就是我想使用的。

例如,对于名为 John Smith 的用户,他的 UPN/电子邮件是 joh.smith@thiscompany.com,他的 AD 帐户名称(SAM 名称)是 Jsmith。目前,我主要做了以下工作:

确认安全问题:

Get-ADUser jsmith -Properties * | Select RD8SecurityQuestions

更改密码:

Set-ADAccountPassword jsmith -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "password1" -Force -Verbose) -PassThru

下次登录时需要更改密码:

Set-ADUser -Identity jsmith -ChangePasswordAtLogon $true

到目前为止,我发现您可以通过以下方式获得安全问题:

Get-ADUser -Filter {EmailAddress -eq 'john.smith@thiscompany.com'} -Properties * | Select RD8SecurityQuestions

但我不知道如何执行其他两个步骤,或者如果有一些明显的东西我遗漏了。

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    很遗憾,回答您的问题,-Identity 参数只接受以下内容:

    • 专有名称
    • 一个 GUID (objectGUID)
    • 安全标识符 (objectSid)
    • SAM 帐户名称 (sAMAccountName)

    虽然,这个参数接受管道输入,所以,Get-ADUser ... | Set-ADAccountPassword 应该可以正常工作。


    注意:感谢TheMadTechnician指出我遗漏的两点:

    1. 不建议在-Filter 参数上不使用ScriptBlock,因为它容易出错。我的代码中$adUsr = Get-AdUser... 的最后一个选项(-Filter {...}).
    2. 查询 Active Directory 时,最好只调用您需要查询的属性 (-Properties RD8SecurityQuestions),而不是查询所有属性 (-Properties *),这始终是一种好习惯(也是为了提高效率)。对于一个用户来说这很好,但如果您需要查询数千个用户,您注意到差异,您的域控制器也会感激不尽:)

    尝试以下任一方法:

    $params = @{
        Reset = $true
        NewPassword = ConvertTo-SecureString -AsPlainText "password1" -Force
        PassThru = $true
    }
    
    $upn = 'joh.smith@thiscompany.com'
    
    # Chose one of these options:
    $adUsr = Get-ADUser -LDAPFilter "(UserPrincipalName=$upn)" -Properties RD8SecurityQuestions
    $adUsr = Get-ADUser -Filter "UserPrincipalName -eq '$upn'" -Properties RD8SecurityQuestions
    $adUsr = Get-ADUser -Filter {UserPrincipalName -eq '$upn'} -Properties RD8SecurityQuestions
    
    # Confirm Security Questions
    $aduser | Select-Object RD8SecurityQuestions
    
    # Then:
    $adUsr | Set-ADAccountPassword @params
    
    # Lastly:
    $adUsr | Set-ADUser -ChangePasswordAtLogon $true
    

    【讨论】:

    • 通常我们会尽量阻止用户在-Filter 参数中使用脚本块。虽然它在很多时候确实有效,但它并没有得到真正的支持,并且可能会导致问题。另外,不要忘记添加-Properties RD8SecurityQuestions,因为用户希望能够在重置密码之前询问安全问题。比-Prop * 好多了
    • 感谢您指出这一点@TheMadTechnician
    • 嘿 Santiago,感谢您注意到我已将域留在其中,非常感谢。也是代码的道具。尝试使用以下命令重置密码并在首次登录时要求更改,但由于某种原因,它只更改了密码,第一次登录时不需要更改:Get-ADUser -LDAPFilter "(UserPrincipalName=john. smith@thiscompany.com)”-属性 RD8SecurityQuestions | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "Password2021" -Force -Verbose) -PassThru |设置-ADUser -ChangePasswordAtLogon $true
    • @Jaden43 嘿,没问题。我不确定您是否可以Set-ADAccountPassword.... -PassThru | Set-ADUser .... 这就是为什么我将代码分为 3 个步骤。
    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多