Verwenden von Powershell (RSAT) zum Zurücksetzen von Passwörtern in AD (Win Server 2008)

Verwenden von Powershell (RSAT) zum Zurücksetzen von Passwörtern in AD (Win Server 2008)

Ich verwende ein Powershell-Skript, das ich online gefunden habe, und versuche, mit einer Win7-CPU Passwörter auf einem Windows Server 2008 über RSAT remote zu ändern. Derzeit sind der Server 2008 und Win7 VMs, und die Win7-CPU ist dem Server zugeordnet und kann das Active Directory-Modul für Powershell ordnungsgemäß ausführen. Ich bin ziemlich neu bei Powershell und im Umgang mit Servern [dieses Projekt ist meine Ausbildung während meines Praktikums], und ich erhalte eine Fehlermeldung, wenn ich versuche, dieses Skript zu kompilieren.

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

Ich dachte, „invoke“ wäre vielleicht nur bei Powershell 3 möglich, aber beim Lesen des Technet-Artikels heißt es, dass es auch für Powershell 2 gilt. Ich habe in AD ein Konto mit dem Namen „Test“, bin mir aber nicht sicher, ob das der tatsächliche gebräuchliche Name ist (Vorname: Test, Nachname: Test, Benutzeranmeldename:[email geschützt]) Kann mir jemand sagen, ob die Ausnahme darauf verweist, dass ich eine falsche CN habe, ODER liegt es an etwas ganz anderem?

Antwort1

Stimme den obigen Kommentaren zu.

Sie können die Verweise auf ADSI (Active Directory Scripting Interface) löschen, da dies die „alte“ Vorgehensweise ist. Das Active Directory PS-Modul wurde entwickelt, um diese zu ersetzen.

In Ihrem Fall müssen Sie also zunächst bestätigen, dass das Benutzerobjekt vorhanden ist. Dies können Sie mit demGet-ADUserCmdlet, basierend auf den von Ihnen gewählten Suchkriterien. An dieser Stelle würde ich vorschlagen, die Suche ziemlich präskriptiv zu gestalten, d. h. so, dass Sie nur ein Benutzerobjekt zurückgeben, z. B.:

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

Sie können dann mit demADAccountPassword festlegenCmdlet zum Zurücksetzen des Passworts (siehe Hyperlink). Dazu ist der Distinguished Name (DN) des Benutzers erforderlich, der ein Attribut Ihres$objBenutzerObjekt zurückgegeben vonGet-ADUserAnruf.

Ich kann dies von hier aus nicht testen. Wenn Sie dies also über eine interaktive PowerShell-Eingabeaufforderung versuchen, können Sie sehen, welche Attribute für Ihre$objBenutzerObjekt:

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

Ich vermute, es gibt eineDNoderDistinguished NameAttribut, aber wie gesagt, ich kann von hier aus nicht testen.

Probieren Sie es aus und informieren Sie uns hier über den Fortschritt, wenn Sie weitere Unterstützung benötigen …

verwandte Informationen