使用Powershell(RSAT)重置AD中的密码(Win Server 2008)

我正在使用一个我在网上find的powershell脚本,试图使用win7 cpu通过RSAT远程更改Windows Server 2008上的密码。 现在,服务器2008和win7是虚拟机,win7 cpu是服务器,可以正确运行PowerShell的Active Directory模块。 我对PowerShell和处理服务器相当陌生(这个项目是我的实习培训),而且在编译这个脚本的时候遇到了一个错误。

import-Module ActiveDirectory Function Set-AdUserPwd { Param( [string]$user, [string]$pwd ) #end param $oUser = [adsi]"LDAP://$user" $ouser.psbase.invoke("SetPassword",$pwd) $ouser.psbase.CommitChanges() } # end function Set-AdUserPwd Set-AdUserPwd -user "cn=test,ou=Users,dc=ifrit,dc=local" -pwd P@ssword1 Exception calling "Invoke" with "2" argument(s): "There is no such object on the server. " At line:10 char:25 + $ouser.psbase.invoke <<<< ("SetPassword",$pwd) + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException 

我认为也许'援引'只是在PowerShell 3,但看看Technet的文章,它说它也适用于PowerShell 2。 我在AD有一个帐户作为“testing”,但我不确定这是否是实际的通用名称(名字:testing,姓氏:testing,用户login名:[email protected])有人可以告诉我,如果exception是指我有一个不正确的CN或者是其他东西?

同意上面的意见。

您可以删除对ADSI(Active Directory脚本界面)的引用,因为这是“旧”的做事方式; Active Directory PS模块已被devise为替代它。

因此,在您的实例中,您首先需要确认用户对象是否存在。 您可以使用Get-ADUser cmdlet根据您select的任何search条件来执行此操作。 现在,在这个阶段,我build议让search非常规范,那就是你只返回一个用户对象,例如:

 try { $objUser = Get-ADUser -Filter { Name -eq $user } // // rest of code here // } catch{ Write-Host "ERROR : Failed to locate user."; } 

然后,您可以使用Set-ADAccountPassword cmdlet重置密码(请参阅超链接)。 这需要用户的专有名称(DN),这将是由Get-ADUser调用返回的$ objUser对象的属性。

我无法从这里进行testing,所以如果您从交互式PowerShell提示符中尝试此操作,则可以看到$ objUser对象存在哪些属性:

 $test = Get-ADUser -Filter { Name -eq "jimbob" } $test | Get-Member 

我怀疑有一个DNDistinguishedName属性,但就像我说的,我不能从这里testing。

如果您需要更多帮助,请点击此处进行更新