使用 Powershell (RSAT) 重設 AD 中的密碼 (Win Server 2008)

使用 Powershell (RSAT) 重設 AD 中的密碼 (Win Server 2008)

我正在使用我在網路上找到的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 中有一個名為「test」的帳戶,但我不確定這是否是實際的常用名稱(名稱:Test,姓氏:Test,使用者登入:[電子郵件受保護])有人可以告訴我異常是指我的 CN 不正確還是完全是其他東西?

答案1

同意上面的評論。

您可以刪除對 ADSI(Active Directory 腳本介面)的引用,因為這是「舊」的處理方式; Active Directory PS 模組旨在取代它。

因此,在您的實例中,您首先需要確認使用者物件存在。您可以使用取得 ADUsercmdlet,基於您選擇的任何搜尋條件。現在,在這個階段,我建議讓搜尋變得非常規範,也就是說,您只傳回一個使用者對象,例如:

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

然後您可以使用設定 ADAccountPassword用於重設密碼的 cmdlet(請參閱超連結)。這需要使用者的專有名稱 (DN),這將是您的屬性$obj用戶傳回的對象取得 ADUser稱呼。

我無法從這裡對此進行測試,因此如果您從互動式 PowerShell 提示字元中嘗試此操作,您可以看到您的系統存在哪些屬性$obj用戶目的:

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

我懷疑有一個DN或者專有名稱屬性,但就像我說的,我無法從這裡進行測試。

嘗試一下,如果您需要更多幫助,請在此處更新進度...

相關內容