_AD_MoveObject verschiebt nicht

  • Hallo,

    ich möchte einen deaktivierten Active-Directory User in eine andere OU verschieben.
    Dafür hab ich eine GUI in der ich zunächst den AD-Account eingebe, ihn per Button deaktiviere und ihn dann noch per Button verschieben möchte.
    Leider bekomme ich "_AD_MoveObject" nicht zum Laufen.

    [autoit]

    Case $Button2
    Global $mValue = _AD_IsObjectDisabled ($user)
    Global $AccName = _AD_SamAccountNameToFQDN($user)
    If $mValue = 1 Then
    _AD_MoveObject ("OU=Users AD deaktiviert,DC=becks,DC=local", $AccName)
    MsgBox(64, "Benutzer verschieben", "Benutzer '" & $user & "' wurde erfolgreich in die OU" & @CRLF & @CRLF & @TAB & "Users AD TS ausgeschieden"& @CRLF & @CRLF & @TAB & " verschoben.")
    Else
    MsgBox(64, "Benutzer verschieben", "Fehler")
    EndIf
    EndIf

    [/autoit]

    Laut _AD_MoveObject-Hilfe wird der FQDN der Ziel-OU benötigt. Ist das eventuell falsch?
    Hab schon mehrere Sachen probiert, allerdings wird das deaktivierte Object einfach nicht verschoben :-/
    Schon einmal Danke für die Hilfe.
    MfG
    Fuschio

  • Dieser Code:

    [autoit]


    $AccName = _AD_SamAccountNameToFQDN($user)
    $moveTo = "OU=Users AD deaktiviert,DC=becks,DC=local"

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

    $iValue = _AD_MoveObject ($moveTo, $AccName)

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

    If $iValue = 1 Then
    MsgBox(64, "Active Directory Functions - Example 1", "Object '" &$AccName & "' successfully moved to '" & $moveTo & "'")
    ElseIf @error = 1 Then
    MsgBox(64, "Active Directory Functions - Example 1", "Target OU '" & $moveTo & "' does not exist")
    ElseIf @error = 2 Then
    MsgBox(64, "Active Directory Functions - Example 1", "Object '" & $AccName & "' does not exist")
    Else
    MsgBox(64, "Active Directory Functions - Example 1", "Return code '" & @error & "' from Active Directory")
    EndIf

    [/autoit]

    liefert mir nun den Fehler:

    ?(

  • Du solltest einen Blick auf SelfADSI und MSDN: Active Directory Service Interfaces werfen.

    [autoit]


    ; TODO: Den ADsPfad an Deine Umgebung anpassen!
    Dim $User = ObjGet('LDAP://CN=Lemon,OU=Bier,DC=Becks,DC=local') ; As IADsUser
    ConsoleWrite(StringFormat('Ist der Benutzer %s deaktiviert? %s\n', _
    $User.CN, $User.AccountDisabled))

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

    ; Um ein Benutzer zu deaktivieren, wird die AccountDisabled-Eigenschaft auf TRUE gesetzt.
    $User.AccountDisabled = True
    ; Benutzer wird erst mit dem Aufruf von SetInfo() gesperrt!
    $User.SetInfo()

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

    ConsoleWrite(StringFormat('Ist der Benutzer %s deaktiviert? %s\n', _
    $User.CN, $User.AccountDisabled))

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

    ; Den "Relative Distinguished Name" zwischenspeichern,
    ; um später wieder Zugriff auf den Benutzer zu erhalten.
    Dim $RDN = $User.Name ; As String

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

    ConsoleWrite(StringFormat('Der Benutzer %s befindet sich in der Organisationseinheit %s.\n', _
    $User.CN, $User.Parent))

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

    ; TODO: Den ADsPfad an Deine Umgebung anpassen!
    Dim $Container = ObjGet('LDAP://OU=Users AD deaktiviert,DC=Becks,DC=local') ; As IADsContainer

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

    ; Den Benutzer in den Container verschieben. Die MoveHere-Methode kann auch zum Umbenennen
    ; von ADsObjekte verwendet werden.
    $Container.MoveHere($User.ADsPath, $RDN)

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

    $User = $Container.GetObject('user', $RDN)
    ConsoleWrite(StringFormat('Der Benutzer %s befindet sich in der Organisationseinheit %s.\n', _
    $User.CN, $User.Parent))

    [/autoit]
  • Ist glaube ich ein Bug im UDF. Sehe ich mir nach meinem Urlaub Ende September an. Touren gerade durch Marokko.

  • Hallo Fuschio,

    versuche einmal bitte folgendes:

    [autoit]

    Global $AccName = _AD_SamAccountNameToFQDN($user & "$")

    [/autoit]

    Laut der Doku muß hinter dem Objektnamen noch ein "$" angestellt werden.

    Grüße
    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

  • "$" am Ende des SamAccountName ist nur bei Computer Accounts notwendig! Der Beispielcode sieht aber eher nach einem Benutzeraccount aus.
    Folgenden Bug meinte ich:

    "_AD_MoveObject crashes when parameter 3 isn't specified and the CN of the user contains characters that need to be escaped. Thanks to user paullauze for reporting this bug!
    Workaround is to specify the escaped (use function _AD_FixSpecialChars) parameter 3. Bug will be fixed in the next version."

    Falls der CN des Benutzers Sonderzeichen enthält (z.B. "CN=Maier, Josef"), dann bitte escapen (z.B. "CN=Maier\, Josef") und als 3. Parameter übergeben.