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

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

我正在使用在线找到的 powershell 脚本,尝试使用 win7 cpu 通过 RSAT 远程更改 Windows Server 2008 上的密码。目前,服务器 2008 和 win7 是 VM,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

我以为“invoke”可能只适用于 powershell 3,但查看 technet 文章后发现,它也适用于 powershell 2。我在 AD 中有一个帐户名为“test”,但我不确定这是否是实际的通用名称(名字:Test,姓氏:Test,用户登录名:[电子邮件保护]) 有人能告诉我异常是否指的是我的 CN 不正确或者是完全是其他原因吗?

答案1

同意上面的评论。

您可以删除对 ADSI(Active Directory 脚本接口)的引用,因为这是做事的“旧”方式;Active Directory PS 模块已被设计来取代它。

因此,在您的实例中,您首先需要确认用户对象存在。您可以使用获取AD用户cmdlet,根据您选择的任何搜索条件。现在,在这个阶段,我建议使搜索非常规范,也就是说您只返回一个用户对象,例如:

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

然后您可以使用设置 ADAccountPasswordcmdlet 来重置密码(参见超链接)。这需要用户的专有名称 (DN),这将是您的$obj用户返回的对象获取AD用户称呼。

我无法从这里测试这一点,因此,如果你从交互式 PowerShell 提示符中尝试此操作,你可以看到你的$obj用户目的:

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

我怀疑有一个DN或者专有名称属性,但就像我说的,我无法从这里测试。

尝试一下,如果您需要更多帮助,请在此更新进度...

相关内容