AD Passwort ändern

  • Hallo Leute

    Will mit autoit das Passwort von einigen Usern ändern.
    Ich weiss das es über LDAP möglich ist. Weiss auch dass es über dsmod möglich ist.

    Mit dsmod können aber keine "€" zeichen gebraucht werden und mir wäre auch sonst lieber mit ldap
    dann kann ich alle weitere adfunctions.au3 befehle zu benutzen.

    Hab da lange ausprobiert, aber es funktioniert einfach nicht. Der User (das objekt) wird gefunden,
    das Passwort allerdings nicht geändert.

    Kann mir jemand helfen?

    [autoit]


    #include <adfunctions.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $username = ""
    $passwort = ""

    [/autoit][autoit][/autoit][autoit]

    If _ADObjectExists($username) = 1 Then
    _ADModifyAttribute($username,"userPassword",$passwort)
    EndIf

    [/autoit]

    vielen dank

    grüsse

    Einmal editiert, zuletzt von Blackdragon_860 (28. Januar 2009 um 12:15)

    • Offizieller Beitrag

    Probier mal, weiß nur nicht genau, ob erst PW-alt und dann PW-neu benötigt wird oder umgekehrt. ;)

    [autoit]

    Local $user = 'user'
    Local $ou = 'buero'
    Local $domain = 'meier_soehne'
    Local $com = 'de'
    Local $pw_old = 'bla'
    Local $pw_new = 'blub'

    [/autoit][autoit][/autoit][autoit]

    $objUser = ObjGet("LDAP://cn=" & $user & ",ou=" & $ou & ",dc=" & $domain & ",dc=" & $com)
    $objUser.ChangePassword($pw_old, $pw_new)

    [/autoit]
  • Moin,

    probier mal in dem Skript von Bugfix anstatt $objUser.ChangePassword

    objUser.SetPassword ($pw_new) oder gffs.

    objUser.SetPassword (""" & $pw_new & """ )

    ;-)) Stefan

    Einmal editiert, zuletzt von ojo (27. Januar 2009 um 10:17)

  • Ich kriege schon bei der Include-Datei folgenden Fehler gemeldet:

    P:\Programme\AutoIt3\Include\ADFunctions.au3 (85) : ==> Variable must be of type "Object".:
    Global $strDNSDomain = $objRootDSE.Get ("defaultNamingContext")
    Global $strDNSDomain = $objRootDSE^ ERROR
    ->12:33:21 AutoIT3.exe ended.rc:1

    Hat jemand ne Idee, warum?

    System: Win 2000, AutoIt-Version 3.3.0.0

    -Rasta-

    • Offizieller Beitrag

    Hallo,

    ich hab's mal so probiert und das klappt einwandfrei!


    [autoit]

    #include "adfunctions.au3"

    [/autoit][autoit][/autoit][autoit]

    $username = "Testuser"
    $passwort = "abc@123"

    [/autoit][autoit][/autoit][autoit]

    If _ADObjectExists($username) = 1 Then
    $strQuery = "<LDAP://" & $strHostServer & "/" & $strDNSDomain & ">;(sAMAccountName=" & $username & ");ADsPath;subtree"
    $objRecordSet = $ObjConnection.Execute ($strQuery) ; Retrieve the FQDN for the object

    $ldap_entry = $objRecordSet.fields(0).value
    $oObject = ObjGet($ldap_entry) ; Retrieve the COM Object for the object

    $oObject.SetPassword($passwort)
    EndIf

    [/autoit]
  • Moin,

    es scheint Probleme in Verbindung mit Windows2003 AD mit der adfunctions.au3 zu geben.

    Ich habe festgestellt, dass z. Bsp _ADIsMemberOf mit fehlerhafter DN Syntax abbricht.

    _ADIsMemberOF ("G_XXXX_XXX", "USER") ERROR, Nummer 80072032, Es wurde eine ungültige dn-Syntax angegeben.

    _ADGetUserGroups liefert korrekte Gruppenmitgliedschaften nur für Domänenadmins.

    Kann das jemand bestätigen?

    Stefan

  • ich kriege mit der version auch nur Fehler - angeblich fehlen immer right brackets ")"

    muss mal sehen ob ich die "alte" Version der AD functions noch wo rumfliegen habe, die lief eigentlich soweit

    die ausgelesenen LDAP Pfade und Variablen sind aber alle richtig gefüllt :wacko:

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • Ok leute, hab es jetzt so gelöst..
    vielleicht kann es ja jemand gebrauchen:

    [autoit]


    Func _passwortWechsel($object, $password)
    Global $objConnection = ObjCreate("ADODB.Connection") ; Create COM object to AD
    $objConnection.ConnectionString = "Provider=ADsDSOObject"
    $objConnection.Open ("Active Directory Provider") ; Open connection to AD

    [/autoit][autoit][/autoit][autoit]

    Global $objRootDSE = ObjGet("LDAP://RootDSE")
    Global $strDNSDomain = $objRootDSE.Get ("defaultNamingContext") ; Retrieve the current AD domain name
    Global $strHostServer = $objRootDSE.Get ("dnsHostName") ; Retrieve the name of the connected DC
    Global $strConfiguration = $objRootDSE.Get ("ConfigurationNamingContext") ; Retrieve the Configuration naming context

    [/autoit][autoit][/autoit][autoit]

    $strQuery = "<LDAP://" & $strHostServer & "/" & $strDNSDomain & ">;(sAMAccountName=" & $object & ");ADsPath;subtree"
    $objRecordSet = $ObjConnection.Execute ($strQuery) ; Retrieve the FQDN for the object

    $ldap_entry = $objRecordSet.fields (0).value
    $oObject = ObjGet($ldap_entry) ; Retrieve the COM Object for the object

    [/autoit][autoit][/autoit][autoit]

    $oObject.SetPassword($password)
    $oObject.SetInfo

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit][autoit]


    #include <_passwortWechsel.au3>

    [/autoit][autoit][/autoit][autoit]

    _passwortWechsel("name", "passwort")

    [/autoit]