#cs
#INDEX#=================================================================================
Titel..............: Userkonto entsperren
Version............: 1.0.3 (06.12.2012)
Autor..............: Klaus-Peter Stumpf
AutoIt Version.....: 3.3.8.0++
Sprache............: Deutsch

#Beschreibung#==========================================================================

über eine Inputbox den User eingeben, dann wird der Status angezeigt. Insbesondere ob
das Userkonto gesperrt ist. Ist es gesperrt wird der "ENTSPERREN" - Button aktiv und
mit einem einfachen Klick ist das Konto wieder entsperrt.

Weitere Informationen wie:
Letzte Kennwortänderung, Nächste Kennwortänderung, Letztes Login 
werden angezeigt.

Kennwort ändern etc.

========================================================================================
#ce

#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("Neues Passwort vergeben:", 10, 350, 200, 20)
	Global $IPassword = GUICtrlCreateInput($username, 150, 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", 210, 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)
	
	;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