使用 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.local
、y.example.com
和 z.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 用户密码的主要内容,如果未能解决你的问题,请参考以下文章
powershell [AD - 创建/编辑AD用户]通过powershell创建/编辑AD用户,使用纯文本密码#Windows #Powershell #ActiveDirectory
使用 powershell 添加新的 AD 用户不会使用 AD LDS 添加 samaccountname
powershell 通过PowerShell创建/编辑AD用户,使用纯文本密码