lokale Windows Benutzer Abfragen

  • Servus Leutz,
    folgendes Problem:

    Ich will die lokalen Benutzer an einem Windows PC abfragen.
    Kann man das mit AutoIt realisieren?

    Folgende ansätze habe ich mir überlegt:

      der DOS Befehl "net user <benutzer>" gibt bei Erfolg die User-Daten aus, sonst eine Fehlermeldung

      irgendein VBS-Script

      einfach wild drauf los probieren (mit runasset() eine aktion unter einem bestimmten user ausführen und schauen obs nen fehler gibt)

    Wobei ich letzteres als die schlechteste möglichkeit ansehe :D

    Bei den ersten beiden Varianten stellt sich mir die Frage wie kriege ich vom DOS Befehl, bzw. vom VBS-Script eine Rückmeldung, bzw. Daten zurück.

    Bin ratlos *g*

    Also Danke schonmal gell.

    c ya
    Paddy

    • Offizieller Beitrag

    Hi,

    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

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

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

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

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_GroupUser", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "GroupComponent: " & $objItem.GroupComponent & @CRLF
    $Output = $Output & "PartComponent: " & $objItem.PartComponent & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_GroupUser" )
    Endif

    [/autoit]

    So long,

    Mega

    • Offizieller Beitrag

    Hi,

    und anlegen:

    [autoit]

    ;_NetUser('Jack', 'pw_abc')
    ;_NetUser('Jill', 'pw_def')

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

    Func _NetUser($name, $password = '', $groupname = 'Administrators', $autologon = 0)
    ; Creates user accounts. Only 1 user can have autologon, if set.
    Local $key
    If Not FileExists(EnvGet('AllUsersProfile') & '\..\' & $name) Then
    RunWait(@ComSpec & ' /c ' & _
    'Net User ' & $name & ' ' & $password & ' /add &&' & _
    'Net LocalGroup ' & $groupname & ' ' & $name & ' /add &' & _
    'Net Accounts /MaxPwAge:UnLimited', '', @SW_HIDE)
    If $autologon Then
    $key = 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
    RegWrite($key, 'DefaultUserName', 'Reg_sz', $name)
    RegWrite($key, 'DefaultPassword', 'Reg_sz', $password)
    RegWrite($key, 'AutoAdminLogon', 'Reg_sz', 1)
    EndIf
    EndIf
    EndFunc

    [/autoit]

    So long,

    Mega

  • Also das 1. Script funktioniert, allerdings krieg ich alles aus der ganzen Domäne angezeigt, also alle Gruppen und Benutzer unserer Domäne.

    Von demher such ich doch ein bischen was anderes :rolleyes:

    Bischen mehr Beschreibung:
    Ich will prüfen ob ein lokaler User bereits existiert, wenn nicht dann will ich Ihn anlegen (hab ich übrigens schon realisiert).

    Aber Danke trotzdem @Mega

    c ya
    Paddy

  • Zitat

    Original von PaddyM
    Also das 1. Script funktioniert, allerdings krieg ich alles aus der ganzen Domäne angezeigt, also alle Gruppen und Benutzer unserer Domäne.

    Von demher such ich doch ein bischen was anderes :rolleyes:

    Bischen mehr Beschreibung:
    Ich will prüfen ob ein lokaler User bereits existiert, wenn nicht dann will ich Ihn anlegen (hab ich übrigens schon realisiert).

    Aber Danke trotzdem @Mega

    c ya
    Paddy


    versteh dich nicht ganz aber dazu kannst du doch pee script nutzen???!!!
    z.b. du willst prüfen ob user "xyZ" bereits ein konto hat...

    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_GroupUser", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "GroupComponent: " & $objItem.GroupComponent & @CRLF
    $Output = $Output & "PartComponent: " & $objItem.PartComponent & @CRLF
    ;~ hier kommt die änderung:
    If StringInStr($objItem.PartComponent,"xyZ") Then
    MsgBox(0,"","User 'xyZ' existiert bereits!");" vergessen :/
    Else
    ;_NetUser("xyZ")
    EndIF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_GroupUser" )
    Endif

    [/autoit]

    /edit " vergessen :/

  • Ich nehms zurück :D
    Ich hab mich durch die "Domain Admins" die bei mir angezeigt wurden ablenken lassen. Dabei sind die ja in der Gruppe der lokalen Administratoren drin und werden deshalb angezeigt.

    Ok somit habe ich eine Lösung Dankeschön!

    c ya
    Paddy