AD Kennwort freischalten / ändern / Kontooption setzen

  • Hallo,

    ich erstelle für unseren UHD ein Script, welches es nicht mehr notwendig macht über einen SnapIn der MMC gehen zu müssen.

    Es sollen die Funktionalitäten Konto entsperren, Kennwort neu setzen und Kontooption "Benutzer muss Kennwort bei der nächsten Anmeldung ändern".

    Das mit dem Konto entsprerren funktioniert nun einwandfrei. Allerdings übersteigt es meine derzeitigen Autoit-Kenntnisse noch die zwei anderen Funktionalitäten zu hinterlegen. Ich denke hier an die Vorlagen _AD_SetPasswordExpire.au3 und _AD_SetPassword.au3 (liefere ich einfach mal mit unter Codes).

    Die GUI für ist schon fertig erstellt nun fehlt eben das Wisssen/Fähigkeit die beiden genannten Vorlagen mit einzubauen. Help, I need somebody help...


    #include <ButtonConstants.au3>
    #include <GUIConstants.au3>
    #include <Misc.au3>
    #include <Date.au3>
    #include <WindowsConstants.au3>

    ; länge der Gültigkeit des Domänenkennwortes in Tagen
    Const $ExpireDays = 60

    ; weiter
    Const $ADS_NAME_INITTYPE_GC = 3
    Const $ADS_NAME_TYPE_NT4 = 3
    Const $ADS_NAME_TYPE_1779 = 1
    Dim $unlock
    Dim $mgrvalue
    Dim $mgrsplit
    Dim $title
    Dim $manager
    Dim $mgr
    Dim $pwdexpires
    $username = InputBox("KlauPe - Active Directory Tool-bszid", "Bitte die U-Nummer eingeben:")
    If @error Then Exit
    $oMyError = ObjEvent("AutoIt.Error", "ComError")
    $objRootDSE = ObjGet("LDAP://RootDSE")
    If @error Then
    MsgBox(0, 'KlauPe - Active Directory Tool-bszid / ERROR', 'User ID existiert nicht in der Domäne ' & @LogonDomain)
    Else
    ; DNS - schreibt die aktuelle Domäne
    $objTrans = ObjCreate("NameTranslate")
    $objTrans.Init ($ADS_NAME_INITTYPE_GC, "")
    $objTrans.Set ($ADS_NAME_TYPE_1779, @LogonDomain)
    $objTrans.Set ($ADS_NAME_TYPE_NT4, @LogonDomain & "\" & $username)
    $strUserDN = $objTrans.Get ($ADS_NAME_TYPE_1779)
    $UserObj = ObjGet("LDAP://" & $strUserDN)
    If @error Then
    MsgBox(0, 'KlauPe - Active Directory Tool-bszid / ERROR', 'User ID existiert nicht in der Domäne '& @LogonDomain & @CR & @CR &'Erstellen eines Domänenkontos über Berechtigungsvergabe notwendig!')
    Else
    Call("Displayinfo")

    EndIf
    EndIf
    $UserObj = ""
    $oMyError = ObjEvent("AutoIt.Error", "")
    ;COM Error Funktion
    Func ComError()
    If IsObj($oMyError) Then
    $HexNumber = Hex($oMyError.number, 8)
    SetError($HexNumber)
    Else
    SetError(1)
    EndIf
    Return 0
    EndFunc ;==>ComError


    Func Displayinfo()
    GUICreate("KlauPe - Active Directory Tool-bszid", 370, 480, 300, 300)
    ;Infobereich
    GUICtrlCreateLabel("User ID: ", 10, 10, 60, 20)
    GUICtrlCreateLabel("Vorname: ", 10, 30, 60, 20)
    GUICtrlCreateLabel("Nachname: ", 10, 50, 60, 20)
    GUICtrlCreateLabel("Funktionsstelle: ", 10, 90, 100, 20)
    GUICtrlCreateLabel("Telefone Nummer: ", 10, 110, 90, 20)
    GUICtrlCreateLabel("Konto gesperrt:", 10, 170, 100, 20)
    GUICtrlCreateLabel("letzte Passwortänderung: ", 10, 210, 200, 20)
    GUICtrlCreateLabel($ExpireDays & " Tage bis KW-Änderung: ", 10, 240, 200, 40)
    GUICtrlCreateLabel("Letzte Anmeldung: ", 10, 270, 200, 20)

    ;Passwort neu vergeben
    GUICtrlCreateLabel("User ID (U-Nummer):", 10, 320, 200, 20)
    GUICtrlCreateLabel("Neues Passwort vergeben:", 10, 350, 200, 20)

    ;Kennwort bei nächster Anmeldung ändern
    GUICtrlCreateLabel("KW bei nächster Anmeldung ändern:", 10, 390, 200, 20)
    Global $ICheck = GUICtrlCreateCheckbox("auswählen", 200, 390, 70, 20)
    GUICtrlSetState($ICheck,$GUI_CHECKED)


    $font = "Verdana"
    GUISetFont(9, 600, $font) ; schreibt die Info´s FETT
    $unlock = GUICtrlCreateButton("ENTSPERREN", 230, 170, 120, 22)
    GUICtrlSetState($unlock, $Gui_Disable)
    GUICtrlCreateLabel('' & $username, 150, 10, 100, 20)
    GUICtrlSetColor(-1, 0x0000CC) ; Blue
    GUICtrlCreateLabel('' & $UserObj.FirstName, 150, 30, 100, 20)
    GUICtrlCreateLabel('' & $UserObj.LastName, 150, 50, 250, 20)

    ;für Passwortänderung
    Global $IUser = GUICtrlCreateInput($username, 150, 320, 200, 20)
    Global $IPassword = GUICtrlCreateInput($username, 150, 350, 200, 20)

    ;Schaltflächen für Passwortänderung
    Global $BOK = GUICtrlCreateButton("Neues Passwort setzen", 150, 430, 200, 30)
    GUICtrlSetState(-1,$GUI_Focus)

    $title = GUICtrlRead($title)

    $mgr = GUICtrlCreateLabel('' & $UserObj.Manager, 150, 90, 400, 70)
    $mgrvalue = GUICtrlRead($mgr)
    $mgrsplit = StringSplit("" & $mgrvalue, ",")

    GUICtrlCreateLabel('' & $UserObj.Department, 150, 90, 200, 20)
    GUICtrlCreateLabel('' & $UserObj.TelephoneNumber, 150, 110, 250, 20)

    $userlocked = GUICtrlCreateLabel("?????", 150, 170, 80, 20)
    If Not $UserObj.IsAccountLocked Then
    GUICtrlSetData($userlocked," NEIN")
    GUICtrlSetBkColor($userlocked, 0x00ff00);Grün
    GUICtrlSetState($unlock, $Gui_Disable)
    Else
    GUICtrlSetData($userlocked," JA")
    GUICtrlSetBkColor($userlocked, 0xff0000) ;Rot
    GUICtrlSetState($unlock, $Gui_Enable)


    EndIf
    $lastchange = $UserObj.PasswordLastChanged
    $ExpireDate = StringReplace(_DateAdd("d", $ExpireDays, StringMid($lastchange, 1, 4) & "/" & StringMid($lastchange, 5, 2) & "/" & StringMid($lastchange, 7, 2)), "/", "")
    $Date = StringMid($lastchange, 5, 2) & "/" & StringMid($lastchange, 7, 2) & "/" & StringMid($lastchange, 1, 4)
    $Time = StringMid($lastchange, 9, 2) & ":" & StringMid($lastchange, 11, 2) & ":" & StringMid($lastchange, 13, 2)
    GUICtrlCreateLabel($Date & " " & $Time, 150, 210, 250, 20)
    $pwdexpires = StringMid($ExpireDate, 5, 2) & "/" & StringMid($ExpireDate, 7, 2) & "/" & StringMid($ExpireDate, 1, 4)
    GUICtrlCreateLabel($pwdexpires & ' ' & $Time, 150, 240, 250, 20)

    $lastlogin = $UserObj.LastLogin

    $Date = StringMid($lastlogin, 5, 2) & "/" & StringMid($lastlogin, 7, 2) & "/" & StringMid($lastlogin, 1, 4)
    $Time = StringMid($lastlogin, 9, 2) & ":" & StringMid($lastlogin, 11, 2) & ":" & StringMid($lastlogin, 13, 2)
    GUICtrlCreateLabel($Date & " " & $Time, 150, 270, 250, 20)

    GUISetState()

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $unlock
    If $UserObj.IsAccountLocked Then
    $UserObj.IsAccountLocked = False
    $UserObj.SetInfo

    MsgBox(0, 'KlauPe - Active Directory INFO', "Benutzerkonto wurde entsperrt!")
    Exit
    GUICtrlCreateLabel (""& $UserObj.IsAccountLocked, 100, 430, 10, 20)
    EndIf

    Case $msg = $GUI_EVENT_CLOSE

    Exit
    EndSelect
    WEnd
    EndFunc

    *****_AD_SetPasswordExpire.au3 *****

    #include <AD.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    ; Open Connection to the Active Directory
    _AD_Open()
    If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)
    #cs
    Global $iReply = MsgBox(308, "KlauPe - Kontooptionen", "Mit diesem Tool kann folgende 'Kontooption' gesetzt/entfernt werden:" & @CRLF & @CRLF & _
    "'Benutzer muss Kennwort bei der nächsten Anmeldung ändern'" & @CRLF & @CRLF & "Fortfahren?")
    If $iReply <> 6 Then Exit
    #ce
    #region ### START Koda GUI section ### Form=
    Global $Form = GUICreate("KlauPe - Kontooptionen", 515, 162, 251, 130)
    GUICtrlCreateLabel("User ID (U-Nummer)", 8, 12, 159, 21)
    Global $IUserId = GUICtrlCreateInput("", 241, 8, 259, 21)
    GUICtrlCreateLabel("bei nächster Anmeldung ändern:", 8, 44, 250, 21)
    Global $IRadio1 = GUICtrlCreateRadio("", 241, 40, 17, 21)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlCreateLabel("NICHT bei nächster Anmeldung ändern:", 8, 76, 190, 21)
    Global $IRadio2 = GUICtrlCreateRadio("", 241, 72, 17, 21)
    Global $BOK = GUICtrlCreateButton("Option setzen", 8, 118, 130, 33)
    Global $BCancel = GUICtrlCreateButton("Abbrechen", 428, 118, 73, 33)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

    Global $iFunction = 0
    While 1
    Global $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $BCancel
    Exit
    Case $BOK
    Global $SUserId = GUICtrlRead($IUserId)
    If GUICtrlRead($IRadio1) = $GUI_CHECKED Then $iFunction = 0
    If GUICtrlRead($IRadio2) = $GUI_CHECKED Then $iFunction = -1
    ExitLoop
    EndSwitch
    WEnd

    **********************************************************************************************************************************************************************

    ****_AD_SetPassword.au3 ****

    #include <AD.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    ; Open Connection to the Active Directory
    _AD_Open()
    If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)
    #cs
    Global $iReply = MsgBox(308, "Active Directory Functions - Example 1", "This script sets the password for a user you specify." & @CRLF & @CRLF & _
    "Are you sure you want to change the Active Directory?")
    If $iReply <> 6 Then Exit
    #ce
    ; Enter user and password to change
    #region ### START Koda GUI section ### Form=
    Global $Form1 = GUICreate("KlauPe - Kennwortänderung", 414, 124, 251, 112)
    GUICtrlCreateLabel("User ID (U-Nummer):", 8, 10, 231, 17)
    GUICtrlCreateLabel("Neues Passwort:", 8, 42, 121, 17)
    Global $IUser = GUICtrlCreateInput("", 241, 8, 159, 21)
    Global $IPassword = GUICtrlCreateInput("", 241, 40, 159, 21)
    Global $BOK = GUICtrlCreateButton("Neues Passwort setzen", 8, 72, 121, 33)
    Global $BCancel = GUICtrlCreateButton("Abbrechen", 328, 72, 73, 33, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_DEFPUSHBUTTON))
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

    While 1
    Global $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $BCancel
    Exit
    Case $BOK
    Global $sUser = GUICtrlRead($IUser)
    $sUser = _AD_SamAccountNameToFQDN($sUser)
    Global $sPassword = GUICtrlRead($IPassword)
    ExitLoop
    EndSwitch
    WEnd

    ; Set the password
    Global $iValue = _AD_SetPassword($sUser, $sPassword)
    If $iValue = 1 Then
    MsgBox(64, "KlauPe - Kennwortänderung", "Passwort für User '" & $sUser & "' wurde erfolgreich geändert!")
    ElseIf @error = 1 Then
    MsgBox(64, "KlauPe - Kennwortänderung", "User '" & $sUser & "' existiert nicht")
    Else
    MsgBox(64, "KlauPe - Kennwortänderung", "Return code '" & @error & "' from Active Directory")
    EndIf

    ; Close Connection to the Active Directory
    _AD_Close()

    ************************************************************************************************************************************************

    Danke schoneinmal im Voraus an Euch ALLE!

  • Für die Funktionen Kennwort neu setzen und
    Kontooption "Benutzer muss Kennwort bei der nächsten Anmeldung ändern" brauchst Du nur die Funktion _AD_SetPassword.

    [autoit]

    _AD_SetPassword("User", "Passwort", 1)

    [/autoit]


    setzt das Passwort. Parameter 3 setzt das Flag: "Benutzer muss Kennwort bei der nächsten Anmeldung ändern".

  • Das hat ja schonmal geholfen - DANKE water
    Allerdings scheine ich zu unwissend zu sein um in der GUI den Button "Neues Passwort setzen" mit _AD_SetPassword("$username", "$IPassword") zu belegen. Die Checkbox soll dann den Wert 1 setzen, wenn sie aktiviert ist. ich kriege das einfach nicht hin. Das Entsperren funktioniert ja einwandfrei, aber hier komme ich nun gar nicht weiter :( Kannst Du nochmal helfend darüberschauen water???

  • In Deinem Skript wird $BOK gar nicht abgehandelt. Du musst die Verarbeitung des Buttons noch einbauen.

  • $BOK habe ich jetzt eingebaut - es läuft trotzdem nicht :(
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $unlock
    If $UserObj.IsAccountLocked Then
    $UserObj.IsAccountLocked = False
    $UserObj.SetInfo

    MsgBox(0, 'KlauPe - Active Directory INFO', "Benutzerkonto wurde entsperrt!")
    Exit
    GUICtrlCreateLabel (""& $UserObj.IsAccountLocked, 100, 430, 10, 20)
    EndIf

    Case $msg = $BOK
    $PWChange = _AD_SetPassword($username, $IPassword)

    MsgBox(64, "KlauPe - Kennwortänderung", "Passwort für User '" & $sUser & "' wurde erfolgreich geändert!")

    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd
    EndFunc
    Was mache ich denn nur falsch?

  • "es läuft trotzdem nicht" ist etwas vage.
    Was ist der Wert von @error nach _AD_SetPassword?

  • hallo water,
    (168) : ==> Unknown function name.:
    $PWChange = _AD_SetPassword($username, $IPassword)
    $PWChange = ^ ERROR
    oder habe ich eine Möglichkeit den Fehler noch genauer abzufangen?

  • 168 is the number
    Edit:
    nachdem ich herausgefunden hatte, dass nicht der richtige Wert übergeben wird, habe ich folgende Änderung vorgenommen
    ---
    Case $msg = $BOK
    Global $sUser = GUICtrlRead($username)
    Global $sPassword = GUICtrlRead($IPassword)
    $PWChange = _AD_SetPassword($username, $IPassword)

    MsgBox(64, "KlauPe - Kennwortänderung", "Kennwort wurde auf " & "***** " & $sPassword & " *****" & " geändert"))
    ---
    nun erhalte ich den error: 171

    Einmal editiert, zuletzt von KlauPe (7. Dezember 2012 um 11:55)

  • Bist Du sicher, dass Du "#include <AD.au3>" in Deinem Skript drin hast?

  • richtig "#include <AD.au3>" war natürlich nicht mit im Script
    ist jetzt mit eingebaut
    allerdings wird der User nicht aufgefunden
    ---
    Case $msg = $BOK
    $sUser = GUICtrlRead($username)
    $sPassword = GUICtrlRead($IPassword)
    $PWChange = _AD_SetPassword($username, $IPassword)

    If $PWChange = 1 Then
    MsgBox(64, "KlauPe - Kennwortänderung", "Passwort für User '" & $sPassword & "' wurde erfolgreich geändert!")
    ElseIf @error = 1 Then
    MsgBox(64, "KlauPe - Kennwortänderung", "User '" & $username & "' existiert nicht")
    Else
    MsgBox(64, "KlauPe - Kennwortänderung", "Return code '" & @error & "' from Active Directory")
    EndIf
    Exit
    ---
    es wird also @error = 1 zurückgegeben. Wo ist hier mein logischer Fehler?

  • Du musst den Benutzernamen und nicht die ID des Controls übergeben. Also:

    [autoit]

    $PWChange = _AD_SetPassword($sUser, $sPassword)

    [/autoit]
  • So kann das auch nicht funktionieren!
    Dein Skript ist eine wilde Mischung aus meiner AD UDF und eigenem ADO code.
    Ohne Aufruf von _AD_Open funktioniert keine andere _AD_* Funktion.
    Mein Vorschlag: Wirf Dein ADO Zeug raus und verwende für alle AD Funktionen mein UDF. Dafür gibt es dann auch support ;)

  • OK - ich habe jetzt folgende Lösung:
    Deine AD UDF habe ich zusammengeworfen (Kennwort ändern und Kontooption "beim nächsten Anmelden ändern...")
    #AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
    ; *****************************************************************************
    ; Example 1
    ; Queries the sAMACccountName and the password and tries to change the password.
    ; *****************************************************************************
    #include <AD.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    ; Open Connection to the Active Directory
    _AD_Open()
    If @error Then Exit MsgBox(16, "", "Bei der Funktion _AD_Open gibt es ein Problem. @error = " & @error & ", @extended = " & @extended)
    #cs
    Global $iReply = MsgBox(308, "Active Directory Functions - Example 1", "This script sets the password for a user you specify." & @CRLF & @CRLF & _
    "Are you sure you want to change the Active Directory?")
    If $iReply <> 6 Then Exit
    #ce
    $Zwischen = ClipGet ()

    ; Enter user and password to change
    #region ### START Koda GUI section ### Form=
    Global $Form1 = GUICreate("", 414, 200, 251, 112)
    GUICtrlCreateLabel("User ID (U-Nummer):", 8, 10, 231, 17)
    GUICtrlCreateLabel("Neues Passwort:", 8, 42, 121, 17)
    $IUser = GUICtrlCreateInput($Zwischen, 241, 8, 159, 21)
    Global $IPassword = GUICtrlCreateInput($Zwischen, 241, 40, 159, 21)
    GUICtrlSetState(-1,$GUI_FOCUS)
    GUICtrlCreateLabel("KW muß bei nächster Anmeldung ändern:", 8, 80, 250, 21)
    Global $IRadio1 = GUICtrlCreateRadio("", 255, 76, 17, 21)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlCreateLabel("KW muß NICHT bei nächster Anmeldung ändern:", 8, 110, 250, 21)
    Global $IRadio2 = GUICtrlCreateRadio("", 255, 106, 17, 21)
    Global $BOK = GUICtrlCreateButton("Neues Passwort setzen", 205, 150, 200, 30)
    Global $BCancel = GUICtrlCreateButton("Abbrechen", 8, 150, 100, 30, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_DEFPUSHBUTTON))
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###


    While 1
    Global $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $BCancel
    Exit
    Case $BOK
    Global $sUser = GUICtrlRead($IUser)
    $sUser = _AD_SamAccountNameToFQDN($sUser)
    Global $sPassword = GUICtrlRead($IPassword)
    ;Kontooption
    ;Global $SUserId = GUICtrlRead($IUserId)
    If GUICtrlRead($IRadio1) = $GUI_CHECKED Then $iFunction = 0
    If GUICtrlRead($IRadio2) = $GUI_CHECKED Then $iFunction = -1

    ExitLoop
    EndSwitch
    WEnd

    ; Set the password
    Global $iValue = _AD_SetPassword($sUser, $sPassword)
    ;Kontooption
    Global $iExpire = _AD_SetPasswordExpire($sUser, $iFunction)


    If $iValue = 1 Then
    MsgBox(64, "", "Passwort für User '" & $sUser & "' wurde erfolgreich geändert!")
    ElseIf @error = 1 Then
    MsgBox(64, "", "User '" & $sUser & "' existiert nicht")
    Else
    MsgBox(64, "", "Return code '" & @error & "' from Active Directory")
    EndIf

    ; Close Connection to the Active Directory
    _AD_Close()

    Und meinen AD Code hinsichtlich Unlockinformationen habe ich als eigene exe vorangestellt.
    Nun kann der Helpdesk nachsehen ob User gesperrt und ggf. entsperren. Falls der Helpdesk aber
    ein KW ändern muß wird die UDF von water verwendet.
    Danke an Dich water

  • folgend mal ein script, zum ändern des passwortes, aus den funktionen der AD.au3

    die option, "der user muss das pwd beim ersten login ändern", wird immer gesetzt, weil ein default passwort vergeben wird ...

    Spoiler anzeigen
    [autoit]


    #include <D:\Data\scripte\AD_1.2.0_Functions\AD.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #include <array.au3>

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

    dim $ans
    $a = 0

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

    ; Open Connection to the Active Directory
    _AD_Open()
    $member01 = _AD_IsMemberOf("team-it",@UserName) ;abfrage, ob user in der gruppe admin ist
    If $member01 = 1 Then
    Else
    MsgBox(0,"","keine Rechte ---> Exit")
    Exit
    EndIf

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

    If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

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

    Global $iReply = MsgBox(308, "Info", "This script sets the password for a user you specify." & @CRLF & @CRLF & _
    "Are you sure you want to change the Active Directory?")
    If $iReply <> 6 Then Exit

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

    ; Enter user and password to change
    #region ### START Koda GUI section ### Form=

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

    Global $Form1 = GUICreate("Reset Password", 414, 124, 251, 112)
    GUICtrlCreateLabel("User account (sAMAccountName or FQDN):", 8, 10, 231, 17)
    GUICtrlCreateLabel("New password:", 8, 42, 121, 17)
    Global $IUser = GUICtrlCreateInput("", 241, 8, 159, 21)
    Global $IPassword = GUICtrlCreateInput("defaultpwd", 241, 40, 159, 21, 0x0800)
    Global $BOK = GUICtrlCreateButton("Change Password", 8, 72, 121, 33)
    $label = GUICtrlCreateLabel("4444", 170, 83, 150, 100)
    Global $check_name = GUICtrlCreateButton("Check Name", 328, 72, 73, 33, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_DEFPUSHBUTTON)) ; prüft den namen im AD
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1

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

    Global $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $check_name
    Global $sUser = GUICtrlRead($IUser)
    $sDisplayName = _AD_FQDNToDisplayname($sUser)
    GUICtrlSetData($label, $sDisplayName)
    Case $BOK
    Global $sUser = GUICtrlRead($IUser)
    $ans = Random(10000000,99999999,1)
    ;MsgBox (0,"",$ans)
    $aUser = _AD_GetUserGroups($sUser) ;abfrage der ad gruppe
    ;_ArrayDisplay($aUser)
    For $i = 1 to $aUser[0]
    ;MsgBox(0,"", $aMembers01)
    ;MsgBox(0,"",_AD_FQDNToSamAccountName($aUser[$i]))
    $result = StringInStr(_AD_FQDNToSamAccountName($aUser[$i]), "DP_all_user") abfrage ob der user der gruppe "DP_all_user" angehört, wenn ja, kann pwd geändert werden!
    ;MsgBox(0, "Search result:", $result)

    If $result <> 1 Then
    $a = 0
    Else
    $a = 1
    ExitLoop
    EndIf
    Next

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

    If $a <> 1 Then Exit

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

    ;MsgBox(0,"",$bcode & " " & $ans)
    If _AD_IsObjectLocked($sUser) Then
    MsgBox(64, "Active Directory Functions", "User account '" & $sUser & "' is locked")
    ; unlock Object
    Global $iValue = _AD_UnlockObject($sUser)
    If $iValue = 1 Then
    MsgBox(64, "Active Directory Functions - Example 1", "Object '" & $sUser & "' successfully changed")
    ElseIf @error = 1 Then
    MsgBox(64, "Active Directory Functions - Example 1", "Object '" & $sUser & "' does not exist")
    Else
    MsgBox(64, "Active Directory Functions - Example 1", "Return code '" & @error & "' from Active Directory")
    EndIf
    Else
    MsgBox(64, "Active Directory Functions", "User account '" & $sUser & "' is not locked")
    EndIf

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

    $sUser = _AD_SamAccountNameToFQDN($sUser)
    ;MsgBox(0,"2","test")
    Global $sPassword = GUICtrlRead($IPassword)
    ExitLoop
    EndSwitch
    WEnd

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

    ; Set the password
    Global $iValue = _AD_SetPassword($sUser, $sPassword, 1)
    If $iValue = 1 Then
    MsgBox(64, "Active Directory Functions - Example 1", "Password for user '" & $sUser & "' successfully changed")
    ElseIf @error = 1 Then
    MsgBox(64, "Active Directory Functions - Example 1", "User '" & $sUser & "' does not exist")
    Else
    MsgBox(64, "Active Directory Functions - Example 1", "Return code '" & @error & "' from Active Directory")
    EndIf
    Exit

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

    ; Close Connection to the Active Directory
    _AD_Close()

    [/autoit]

    gruß gmmg

    2 Mal editiert, zuletzt von gmmg (12. Dezember 2012 um 14:17)

  • Einen kleinen Fehler habe ich schon mal gesehen. Zeile 20 sollte unbedingt direkt nach Zeile 12 folgen.