PasswordChanger / GUICtrlRead

  • Hallo,
    ich möchte bestimmten Usern die Möglichkeit geben Kennwörter zurücksetzten zu können. Die User sollen dabei keine AccountOp-Rechte haben. Leider kann ich dieses nicht über die Policies machen.
    Somit bin ich auf AutoIT gestoßen und seit gestern versuche mich in "Programmierung" :-))
    Haben nun zwei sicherlich DAU-Probleme:
    1. Da ich nicht in der Lage bin eine Authentifizierung für die Berechtigten User durchzuführen, wollte ich dieses mit der Abfrage über @userName überprüfen. Hier scheitere ich an der If...Then-Scheife.
    2. Beim 2ten Durchlauf While-Schleife werden die Variablen $userID und $newPWD nicht korrekt über GUICtrlRead eingelesen.
    Was mache ich hier Falsch ?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>

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

    ;GUI Anfang
    GUICreate("Password",200,250)

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

    ;Beginn der Eingabemaske
    GUICtrlCreateLabel("User-ID",10,30)
    $userID = GUICtrlCreateInput("userID",100,30,70,20)
    GUICtrlCreateLabel("Password",10,50)
    $newPWD = GUICtrlCreateInput("password",100,50,70,20)

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

    GUICtrlSetState(-1,$GUI_CHECKED)
    $setbutton = GUICtrlCreateButton ("Set",30,150,70,20)
    GUICtrlSetState(-1,$GUI_FOCUS)
    $cancelbutton = GUICtrlCreateButton ("Cancel",110,150,70,20)

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

    if @UserName <> ("name1" or "name2" or "name3";) Then
    MsgBox(48,"Sorry :-)", "This Tool ist not for you! (" & @UserName & ";)";)
    GUIDelete()
    Exit

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

    Else
    GUISetState ()
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton Then ExitLoop
    If $msg = $setbutton Then

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

    RunAsSet("accountoperator", "Domäne", "Kennwort",2)

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

    $userID=GUICtrlRead($userID)
    $newPWD=GUICtrlRead($newPWD)

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

    MsgBox(0,"Sie haben eingegeben" , "UserID: " & $userID & " newPWD: " & $newPWD)
    RunWait(@COMSPEC & " /c dsquery user -samid " & $userID & ">userDN.txt","",@SW_HIDE)
    $file = FileOpen("userDN.txt", 0)
    $line = FileReadLine($file)
    $userDN = $line
    FileClose($file)
    FileDelete("userDN.txt";)

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

    If $userDN <> "" Then
    $tempVAR1 = ("dsmod user "& $userDN)
    $changebefehl= ($tempVAR1 & " -pwd " & $newPWD)
    RunWait(@COMSPEC & " /c echo " & $changebefehl &">befehl.cmd","",@SW_HIDE)
    RunWait(@COMSPEC & " /c befehl.cmd >report.log","",@SW_HIDE)
    FileDelete("befehl.cmd";)
    Else
    MsgBox(0, "Error", "Wrong UserID (" &$userID & ";)";)
    EndIf
    EndIf

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

    WEnd
    EndIf

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

    GUIDelete()
    Exit

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

    Danke & Viele Grüße aus Aachen,
    Dimi

  • Die IF müsste so ausehen:

    [autoit]

    if @UserName <> "name1" or @UserName <> "name2" or @UserName <> "name3" Then
    MsgBox(48,"Sorry :-)", "This Tool ist not for you! (" & @UserName & ")")
    GUIDelete()
    Exit

    Else
    GUISetState ()
    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton Then ExitLoop
    If $msg = $setbutton Then

    RunAsSet("accountoperator", "Domäne", "Kennwort",2)

    $userID=GUICtrlRead($userID)
    $newPWD=GUICtrlRead($newPWD)

    MsgBox(0,"Sie haben eingegeben" , "UserID: " & $userID & " newPWD: " & $newPWD)
    RunWait(@COMSPEC & " /c dsquery user -samid " & $userID & ">userDN.txt","",@SW_HIDE)
    $file = FileOpen("userDN.txt", 0)
    $line = FileReadLine($file)
    $userDN = $line
    FileClose($file)
    FileDelete("userDN.txt")

    If $userDN <> "" Then
    $tempVAR1 = ("dsmod user "& $userDN)
    $changebefehl= ($tempVAR1 & " -pwd " & $newPWD)
    RunWait(@COMSPEC & " /c echo " & $changebefehl &">befehl.cmd","",@SW_HIDE)
    RunWait(@COMSPEC & " /c befehl.cmd >report.log","",@SW_HIDE)
    FileDelete("befehl.cmd")
    Else
    MsgBox(0, "Error", "Wrong UserID (" &$userID & ")")
    EndIf
    EndIf

    WEnd
    EndIf

    GUIDelete()
    Exit

    [/autoit]
    • Offizieller Beitrag

    Hallo!

    Das erste ist gefixt, was ist das genaue Problem mit dem GUICtrlRead? Bei mir hat es in einem ersten Test geklappt (korrekt angezeigt in MsgBox).

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    ;GUI Anfang
    GUICreate("Password",200,250)

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

    ;Beginn der Eingabemaske
    GUICtrlCreateLabel("User-ID",10,30)
    $userID = GUICtrlCreateInput("userID",100,30,70,20)
    GUICtrlCreateLabel("Password",10,50)
    $newPWD = GUICtrlCreateInput("password",100,50,70,20)

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

    GUICtrlSetState(-1,$GUI_CHECKED)
    $setbutton = GUICtrlCreateButton ("Set",30,150,70,20)
    GUICtrlSetState(-1,$GUI_FOCUS)
    $cancelbutton = GUICtrlCreateButton ("Cancel",110,150,70,20)

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

    if (@UserName <> "Johannes") and (@UserName <> "name2") and (@UserName <> "name3") Then
    MsgBox(48,"Sorry :-)", "This Tool ist not for you! (" & @UserName & ";)")
    GUIDelete()
    Exit
    Else
    GUISetState ()
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton Then ExitLoop
    If $msg = $setbutton Then

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

    RunAsSet("accountoperator", "Domäne", "Kennwort",2)

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

    $userID=GUICtrlRead($userID)
    $newPWD=GUICtrlRead($newPWD)

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

    MsgBox(0,"Sie haben eingegeben" , "UserID: " & $userID & " newPWD: " & $newPWD)
    RunWait(@COMSPEC & " /c dsquery user -samid " & $userID & ">userDN.txt","",@SW_HIDE)
    $file = FileOpen("userDN.txt", 0)
    $line = FileReadLine($file)
    $userDN = $line
    FileClose($file)
    FileDelete("userDN.txt")

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

    If $userDN <> "" Then
    $tempVAR1 = ("dsmod user "& $userDN)
    $changebefehl= ($tempVAR1 & " -pwd " & $newPWD)
    RunWait(@COMSPEC & " /c echo " & $changebefehl &">befehl.cmd","",@SW_HIDE)
    RunWait(@COMSPEC & " /c befehl.cmd >report.log","",@SW_HIDE)
    FileDelete("befehl.cmd")
    Else
    MsgBox(0, "Error", "Wrong UserID (" &$userID & ";)")
    EndIf
    EndIf

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

    WEnd
    EndIf

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

    GUIDelete()
    Exit

    [/autoit]

    @Zen: Der Boole'sche Operator muss "and" sein, nicht "or". In deinem Beispiel würde niemand ausgeschlossen werden. Wenn du "or" nimmst, müsste man "=" prüfen, nicht "<>"...

    peethebee

    Edit: 1:0 für Zen ;)

  • Hi und welcome ;)
    das semikolon ist in autoit dafür gedacht kommentare zu schreiben...alles was in der gleichen zeile folgt ist kommentar und wird nicht als programm angesehen...sonst war ich mal einfach zu langsam ;)

    PS:ich würde das passwort mit "*" "escapen" like this...

    [autoit]

    $pwLabel = GUICtrlCreateLabel("User Passwort", 264, 32, 69, 17)
    $Passwort = GUICtrlCreateInput("Passwort", 336, 32, 185, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))

    [/autoit]


    Musst nur x bzw y koordinaten an dein script anpassen...

  • Hallo @all,

    das ging ja richtig flott! Vielen Dank!
    So jetzt zum Problem mit GUICtrlRead. Wenn Du auf "SET"-Klickst wird bei ersten mal der User richtig angezeit. Beim zweiten mal draufklicken erscheint laut MsgBox nur eine "0" obwohl im Feld etwas steht.

    Gruß,
    Dimi


    Zitat

    Original von peethebee
    Hallo!

    Das erste ist gefixt, was ist das genaue Problem mit dem GUICtrlRead? Bei mir hat es in einem ersten Test geklappt (korrekt angezeigt in MsgBox).

    [

    peethebee

    Edit: 1:0 für Zen ;)

    • Offizieller Beitrag

    Hi!

    Du darfst nicht die ID mit dem Wert überschreiben...
    Gefixte Version gleich.

    Also:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    ;GUI Anfang
    GUICreate("Password",200,250)

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

    ;Beginn der Eingabemaske
    GUICtrlCreateLabel("User-ID",10,30)
    $userID_id = GUICtrlCreateInput("userID",100,30,70,20)
    GUICtrlCreateLabel("Password",10,50)
    $newPWD_id = GUICtrlCreateInput("password",100,50,70,20)

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

    GUICtrlSetState(-1,$GUI_CHECKED)
    $setbutton = GUICtrlCreateButton ("Set",30,150,70,20)
    GUICtrlSetState(-1,$GUI_FOCUS)
    $cancelbutton = GUICtrlCreateButton ("Cancel",110,150,70,20)

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

    if (@UserName <> "Johannes") and (@UserName <> "name2") and (@UserName <> "name3") Then
    MsgBox(48,"Sorry :-)", "This Tool ist not for you! (" & @UserName & ";)")
    GUIDelete()
    Exit
    Else
    GUISetState ()
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton Then ExitLoop
    If $msg = $setbutton Then

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

    RunAsSet("accountoperator", "Domäne", "Kennwort",2)

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

    $userID=GUICtrlRead($userID_id)
    $newPWD=GUICtrlRead($newPWD_id)

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

    MsgBox(0,"Sie haben eingegeben" , "UserID: " & $userID & " newPWD: " & $newPWD)
    RunWait(@COMSPEC & " /c dsquery user -samid " & $userID & ">userDN.txt","",@SW_HIDE)
    $file = FileOpen("userDN.txt", 0)
    $line = FileReadLine($file)
    $userDN = $line
    FileClose($file)
    FileDelete("userDN.txt")

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

    If $userDN <> "" Then
    $tempVAR1 = ("dsmod user "& $userDN)
    $changebefehl= ($tempVAR1 & " -pwd " & $newPWD)
    RunWait(@COMSPEC & " /c echo " & $changebefehl &">befehl.cmd","",@SW_HIDE)
    RunWait(@COMSPEC & " /c befehl.cmd >report.log","",@SW_HIDE)
    FileDelete("befehl.cmd")
    Else
    MsgBox(0, "Error", "Wrong UserID (" &$userID & ";)")
    EndIf
    EndIf

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

    WEnd
    EndIf

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

    GUIDelete()
    Exit

    [/autoit]


    Getestet.

    peethebee

  • Ist ja auch alles freiwillig und ich fands immer klasse, wenn ich Hilfe bekommen habe!

    Gruß
    Zen