Benutzer suchen

  • Hallo zusammen

    Ich wollte mal Fragen, gibt es einen Befehl um im Windows nach einem bestimmten User zu suchen? Also so zu sagen, ist Benutzer "123" auf dem Rechner vorhanden?

    gruss

  • Weiss jetzt nicht ob es eine Funktion für gibt, aber du kannst doch einfach schauen ob ein Ordner mit dem Benutzernamen existiert oder nicht:

    Code
    IF DOK. und EINST./BENUTZER VORHANDEN THEN
    TUE WAS ICH WILL

    So in die Richtung meine ich... Bitte nicht gleich kreuzigen für den Code.. ^^

  • Hehe, ja da hab ich auch schon dran gedacht :D! Aber das Problem ist, hier bei uns im Netzwerk kann es eben sein, dass auf einem x-beliebigen Rechner, der Ordner "123" schon existiert. Aber der Account ist beispielsweise gelöscht. Deswegen kann man sich auf diese Suche nicht verlassen. Ich müsste also direkt im System nachschauen, ob der Benutzer existiert auf dem PC.

    • Offizieller Beitrag
    User Accounts
    [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_UserAccount", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "AccountType: " & $objItem.AccountType & @CRLF
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "Description: " & $objItem.Description & @CRLF
    $Output = $Output & "Disabled: " & $objItem.Disabled & @CRLF
    $Output = $Output & "Domain: " & $objItem.Domain & @CRLF
    $Output = $Output & "FullName: " & $objItem.FullName & @CRLF
    $Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
    $Output = $Output & "LocalAccount: " & $objItem.LocalAccount & @CRLF
    $Output = $Output & "Lockout: " & $objItem.Lockout & @CRLF
    $Output = $Output & "Name: " & $objItem.Name & @CRLF
    $Output = $Output & "PasswordChangeable: " & $objItem.PasswordChangeable & @CRLF
    $Output = $Output & "PasswordExpires: " & $objItem.PasswordExpires & @CRLF
    $Output = $Output & "PasswordRequired: " & $objItem.PasswordRequired & @CRLF
    $Output = $Output & "SID: " & $objItem.SID & @CRLF
    $Output = $Output & "SIDType: " & $objItem.SIDType & @CRLF
    $Output = $Output & "Status: " & $objItem.Status & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
    Endif

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

    Func WMIDateStringToDate($dtmDate)
    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

    [/autoit]
  • BugFix Besten Dank..Sehr ausführlich xD...Er gibt mir ja jetzt alle Accounts aus, welche auf meinem Rechner sind. Ist es möglich jetzt nur nach einem bestimmten zu suchen?

    • Offizieller Beitrag

    Na klar :)

    [autoit]

    ; Generated by AutoIt Scriptomatic

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

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    $ACC_2_Search = 'Accountname'

    [/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_UserAccount", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    If $objItem.Name = $ACC_2_Search Then
    MsgBox(0, 'Gefunden', $ACC_2_Search & ' auf PC vorhanden.')
    ExitLoop
    EndIf
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
    Endif

    [/autoit]

    Edit: Du kannst auch im Netzwerk abfragen, für $strComputer = "localhost" dann die IP übergeben.

  • @Pee und Bugfix Habe beide Varianten ausprobiert, und beide gefallen mir :D. Thread kann von mir aus geschlossen werden..

  • Hmm, ich hab doch noch eine Frage :D! Und zwar möchte ich gerne ein Logfile erstellen, mit den Daten, welche ich bekomme. Ich weiss das es mit dem Befehl _FileWriteLog ist..aber bei mir hats nie funktioniert. weiss jemand wohin damit? :S

    • Offizieller Beitrag

    In der Schleife einfach vor die Zeile mit der MsgBox:

    [autoit]

    _FileWriteLog($LogFilePath, $Output)

    [/autoit]

    Aber warum in ein LogFile? Die Abfrage machst du doch einmal und dann weißt du Bescheid. Da kommt es doch sicher nicht auf Datum und Zeit der Abfrage an - oder?

  • Es ist einfach noch gut zu sehen, dass es in einem LogFile abgespeichert ist. Halt z.b. wenn man sieht, wann es das letzte mal funktioniert hat (falls es morgen nicht funktionieren würde). Dieses LogFile gibt ja nicht nur zeit und datum, sondern auch den Inhalt (welche ich angebe) aus nicht?

    Zum Befehl..Ich habs mit $Output schon probiert, irgendwie ging das eben nicht .deswegen frage ich X(

  • _FileWriteLog($LogFilePath, $Output)


    $LogFilePath, muss ich diese Variable noch oben im Script deklarieren?

  • Stimmt schon so oder? Wenn ja, es erstellts nich X(

    [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    Global $LogFilePath = @ScriptDir & '\test.log'
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")

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

    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount WHERE name = 'Install' ", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "Account Typ: " & $objItem.AccountType & @CRLF
    $Output = $Output & "Beschriftung: " & $objItem.Caption & @CRLF
    $Output = $Output & "Beschreibung: " & $objItem.Description & @CRLF
    $Output = $Output & "Domäne: " & $objItem.Domain & @CRLF
    $Output = $Output & "Voller Name: " & $objItem.FullName & @CRLF
    if MsgBox(1,"Benutzerverwaltung",$Output) = 2 then ExitLoop
    $Output=""

    Next

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

    Else
    _FileWriteLog($LogFilePath, $Output)
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
    Endif

    [/autoit]
  • Haha gerade wollte ich das antworten, habs gemerkt...Ich hab eben immer dieses testfile offen xD! Sorry nochmals!!