Windows-Account: Admin oder Eingeschränkt ?

    • Offizieller Beitrag

    Hi,
    ich habe ein Tool geschrieben um AutoAdminLogon zu aktivieren/ deaktivieren.
    Dann brauch ich da nicht jedes mal bei unseren Kunden von Hand zu fummeln.
    Für meine Zwecke reichts ja, ich hätte es aber gern allgemeingültig geschrieben und dazu benötige ich eine Möglichkeit herauszufinden, welche der Benutzerkonten Admin und welche Eingeschränkt sind.
    Dann würde ich auch nur diese in der Userliste aufführen, da AutoAdminLogon, wie der Name sagt, nur für Adminkonten funktioniert.

    Also, wenn da jemand 'ne Idee hat - immer her damit. :)

    (AutoAdminLogon sollte aber niemals auf 'nem PC mit Internetzugang und/oder LAN-Zugehörigkeit verwendet werden. - Denn das PW wird im Klartext gespeichert in der Registry. Wenn die dann nicht gut eingetütet ist....)

    Hier das Script:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.1.14 (beta)
    Author: BugFix ( [email='bugfix@autoit.de'][/email] )
    Script Function: AutoAdminLogon aktivieren / deaktivieren

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

    #ce ----------------------------------------------------------------------------
    #include <GUIConstants.au3>
    #include <array.au3>
    #Include <GuiList.au3>
    Dim $LogonKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
    Dim $AllUserKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
    Dim $CurrDefUser = RegRead($LogonKey, "DefaultUserName"), $AllUsers = ""
    Dim $arUsers, $CurrAutologonUser, $User

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

    If RegRead($LogonKey, "AutoAdminLogon") = "" Or RegRead($LogonKey, "AutoAdminLogon") = 0 Then
    $CurrAutologonUser = "kein Konto"
    Else
    $CurrAutologonUser = $CurrDefUser
    EndIf
    $Form1 = GUICreate("Auto Login festlegen / aufheben", 263, 224, -1, -1)
    $Input1 = GUICtrlCreateInput("", 124, 140, 133, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button1 = GUICtrlCreateButton("Auto Login aufheben", 6, 169, 250, 21, 0)
    $Button2 = GUICtrlCreateButton("Auto Login für markiertes Konto festlegen", 6, 196, 250, 21, 0)
    $Group1 = GUICtrlCreateGroup("Benutzerkonten auf diesem PC", 6, 10, 250, 125)
    $List1 = GUICtrlCreateList("", 15, 28, 233, 102)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label1 = GUICtrlCreateLabel("Auto Login besteht für:", 6, 143, 111, 17)
    GUISetState(@SW_SHOW)

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

    For $i= 1 to 20 ; Benutzerkonten auslesen
    $var = RegEnumKey($AllUserKey, $i)
    If @error <> 0 then ExitLoop
    $tmp = RegRead($AllUserKey & "\" & $var, "ProfileImagePath")
    $str = StringRight($tmp, StringLen($tmp) - StringInStr($tmp, "\", 1, -1))
    If $str <> "systemprofile" And $str <> "LocalService" And $str <> "NetworkService" Then
    If $AllUsers = "" Then
    $AllUsers &= $str
    Else
    $AllUsers &= "|" & $str
    EndIf
    EndIf
    Next
    $arUsers = StringSplit($AllUsers, "|")
    For $i = 1 To $arUsers[0] ; Benutzer in Liste eintragen
    _GUICtrlListAddItem($List1, $arUsers[$i])
    Next
    _MarkDefUser($CurrDefUser)
    GUICtrlSetData($Input1, $CurrAutologonUser) ; Kontoname eintragen, falls AutoLogon bereits besteht

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _AutoOFF()
    Case $Button2
    _AutoON()
    EndSwitch
    WEnd

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

    Func _MarkDefUser($tmpUser)
    If $tmpUser <> "" Then ; DefaultUser markieren
    For $i = 0 To _GUICtrlListCount($List1) - 1
    If $tmpUser = _GUICtrlListGetText($List1, $i) Then
    _GUICtrlListSelectIndex($List1, $i)
    ExitLoop
    EndIf
    Next
    EndIf
    EndFunc

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

    Func _AutoON()
    $User = _GUICtrlListGetText($List1, _GUICtrlListGetCaretIndex($List1))
    If MsgBox(262180, 'Auto Logon setzen', 'Soll für den Benutzer: ' & $User & @LF & _
    "das automatische Einloggen aktiviert werden?" & @LF & _
    "(Hinweis: Nur für Benutzer mit Administratorrechten möglich.)" ) = 6 Then
    RegWrite($LogonKey, "DefaultUserName", "REG_SZ", $User)
    RegWrite($LogonKey, "DefaultPassword", "REG_SZ", InputBox("Passwort", "Bitte Passwort für: " & $User & " eingeben." _
    & @LF & "Falls der Nutzer kein Passwort hat - frei lassen.", "", "*" ))
    RegWrite($LogonKey, "AutoAdminLogon", "REG_SZ", 1)
    RegWrite($LogonKey, "ForceAutoLogon", "REG_SZ", 1)
    _CheckRegEntry()
    EndIf
    EndFunc

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

    Func _AutoOFF()
    RegWrite($LogonKey, "AutoAdminLogon", "REG_SZ", 0)
    If @error <> 0 Then
    MsgBox(262160, 'Auto Logon', "Vorgang fehlgeschlagen.")
    Else
    RegWrite($LogonKey, "DefaultPassword", "REG_SZ", "")
    RegWrite($LogonKey, "ForceAutoLogon", "REG_SZ", 0)
    GUICtrlSetData($Input1, "kein Konto")
    MsgBox(262208, 'Auto Logon', "Auto Logon wurde erfolgreich deaktiviert.")
    EndIf
    EndFunc

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

    Func _CheckRegEntry()
    If RegRead($LogonKey, "AutoAdminLogon") = 1 And RegRead($LogonKey, "ForceAutoLogon") = 1 Then
    MsgBox(262208, 'Auto Logon', "Das automatische Einloggen für: " & RegRead($LogonKey, "DefaultUserName") _
    & " wurde erfolgreich eingerichtet.")
    GUICtrlSetData($Input1, $User)
    _MarkDefUser($User)
    Else
    MsgBox(262160, 'Auto Logon', "Vorgang fehlgeschlagen.")
    EndIf
    EndFunc

    [/autoit]
  • Hi,
    Also alle Administratoren auslesen sollte etwa so funktionieren:

    [autoit]

    dim $admins
    $strComputer = @ComputerName

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

    $objGroup =ObjGet("WinNT://" & $strComputer & "/Administratoren")

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

    For $objUser In $objGroup.Members
    $admins&=$objUser.Name & @CRLF
    Next
    MsgBox("","",$admins)

    [/autoit]

    Wieso speicherst Du das PW nicht mittels _StringEncrypt in der Registry ab???

    Gruss
    eddy_erpel

    • Offizieller Beitrag
    Zitat

    Wieso speicherst Du das PW nicht mittels _StringEncrypt in der Registry ab???


    Weil Windows Logon das Passwort im Klartext fordert. AutoAdminLogon ist ja keine Erfindung von mir, sondern eine Windows-eigene Funktion.

    Den Tipp mit den Admins werde ich gleich mal testen, thx.

  • he BugFix, Du kannst ebenso zuverlässig dechiffrieren. Probiere das Beispiel aus. Beachte Du musst vor jeder Aktion ein Chiffrierungspasswort eingeben. Herzlichst Jan

    • Offizieller Beitrag

    Hi!

    janrenzlow: Windows liest aus der Registry das Passwort aus wie BugFix schon sagte. In diesem Moment läuft kein AutoIt-Skript. Das bedeutet, dass Windows die Regeln macht und die sind nunmal dergestalt, dass das Passwort aus der Registry so wie es dort steht verwendet wird. Man darf es also nicht verschlüsselt dort hinterlegen, wenn man möchte, dass man auch eingeloggt wird...

    Gute Nacht,
    peethebee