使用 PowerShell 问题重置 AD 用户密码

Posted

技术标签:

【中文标题】使用 PowerShell 问题重置 AD 用户密码【英文标题】:Reset AD User Password using PowerShell Issue 【发布时间】:2019-02-14 07:13:00 【问题描述】:

我正在检查使用 PowerShell 重置 AD 用户密码的方法,我发现 Set-ADAccountPassword 它正在工作,但我不确定如何在我的环境中使用它。

我有一个包含许多子域的林:example.local 作为主域,x.example.localy.example.comz.example.com 作为子域。

我想要实现的是能够从位于父域中的服务器重置子域帐户的密码 现在,以下事情对我有用。

如果从驻留在子域x.example.local 中的服务器运行:

Set-ADAccountPassword -Identity "John.Doe" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "ABCD1234" -Force)

在森林中的任何地方工作:

Set-ADAccountPassword -Identity "CN=Doe, John X.,OU=b,OU=a,DC=x,DC=example,DC=local" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "ABCD1234" -Force)

我真正需要的是能够将 Windows 用户登录名 从服务器父域(即example.local)放入脚本中,例如,example.local,顺便说一句。 p>

Set-ADAccountPassword -Identity "CN=John.Doe,OU=b,OU=a,DC=x,DC=example,DC=local" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "ABCD1234" -Force)

我怎样才能做到这一点?

【问题讨论】:

我认为您缺少核心概念。如果您有权在父域中重置密码,那么由于传递信任,您可以在所有子域中执行相同操作。现在,通过在身份中提供相同的用户名也应该可以跨子域工作。此外,您从哪个系统运行并不重要,因为最终它在同一个林中 您应该先使用Get-ADUser 来查找用户。 -Identity 参数采用以下任何一项:DistinguishedName、GUID、SID 或 SAM 帐户名称。然后,如果您有一个用户对象,您可以将其用于Set-ADAccountPassword cmdlet。请解释John.Doe 是什么。 SamAccountname 可能是用户 UPN 的一部分? 【参考方案1】:

我认为其他答案有些混乱,我希望将它们正确设置。

如果我理解您的问题,您希望使用 Sam 帐户名称而不是用户的 DN。

试试这个。

Set-ADAccountPassword -Identity "Jdoe" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "ABCD1234" -Force)

JDOE 是 John Doe 的登录 ID。 如果您想在不同的域中执行此操作,请添加 -server 选项。对于 childdomain.MyDomain.local 域,这样做:

Set-ADAccountPassword -Identity "Jdoe" -Reset -server ChilDomain.MyDomain.Local -NewPassword (ConvertTo-SecureString -AsPlainText "ABCD1234" -Force)

与制作的其中一个 cmets 不同,仅仅因为您有信任,并不意味着您将有权更改目标域中的密码。

您在其中运行此进程的 AD 帐户将需要拥有该权限,方法是成为 DC 上其他域的本地管理员组的成员,或者通过策略专门添加到其他域中的 AD(或直接应用到用户所在的 OU 等),或企业管理员的成员。

当然,您可以为其他域中的用户使用 CN,但请记住,CN 在每个域之间会有所不同。

【讨论】:

仍然得到同样的错误:Get-ADUser:找不到具有身份的对象:'John.Doe' under:'DC=example,DC=local',即使我提到了一个 -server 选项,例如, Set-ADAccountPassword -Identity $ADuser -Reset -server subdomain.example.local -NewPassword (ConvertTo-SecureString -AsPlainText $password -Force) Get-ADUser?你在哪里使用Get-ADUser【参考方案2】:

我发现用于 AD 的 PowerShell cmdlet 在具有多个域的环境中有点愚蠢。他们无法确定受信任的域。您必须明确地将它们指向域。您可以使用 -Server 参数执行此操作,在该参数中,您可以为其提供完全限定的域名(或如果需要,也可以指定特定的 DC)。

所以在你的情况下,这意味着:

Set-ADAccountPassword -Server x.example.local -Identity "CN=John.Doe,OU=b,OU=a,DC=x,DC=example,DC=local" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "ABCD1234" -Force)

【讨论】:

仍然得到同样的错误:Get-ADUser:找不到具有身份的对象:'John.Doe' under:'DC=example,DC=local',即使我提到了一个 -server 选项,例如, Set-ADAccountPassword -Identity $ADuser -Reset -server subdomain.example.local -NewPassword (ConvertTo-SecureString -AsPlainText $password -Force)

以上是关于使用 PowerShell 问题重置 AD 用户密码的主要内容,如果未能解决你的问题,请参考以下文章

在AD中导出所有用户资料

powershell [AD - 创建/编辑AD用户]通过powershell创建/编辑AD用户,使用纯文本密码#Windows #Powershell #ActiveDirectory

使用 powershell 添加新的 AD 用户不会使用 AD LDS 添加 samaccountname

powershell 通过PowerShell创建/编辑AD用户,使用纯文本密码

powershell powershell脚本使用姓氏和给定名称更改AD用户显示名称。

自助重置AD域用户密码_如何更好的对AD域用户密码进行管理