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
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
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.
; Generated by AutoIt Scriptomatic
[/autoit] [autoit][/autoit] [autoit]$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_UserAccount", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
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
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
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?
Na klar
[autoit]; Generated by AutoIt Scriptomatic
[/autoit][autoit][/autoit][autoit]$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$ACC_2_Search = 'Accountname'
$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)
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
Edit: Du kannst auch im Netzwerk abfragen, für $strComputer = "localhost" dann die IP übergeben.
SELECT * FROM Win32_UserAccount WHERE name = '123' nehme ich an -- oder halt FullName, was du brauchst.
peethebee
@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?
$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_UserAccount WHERE name = 'Install' ", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
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 & "Domain: " & $objItem.Domain & @CRLF
$Output = $Output & "FullName: " & $objItem.FullName & @CRLF
if Msgbox(1,"Benutzerverwaltung",$Output) = 2 then ExitLoop
$Output=""
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
Endif
Alles anzeigen
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
Was geht denn nicht?
Im LogFile sollte in etwa erscheinen:
DATUM ZEIT: AccountType: .......
Caption: .....
Description: .....
Domain: .....
FullName: .....
_FileWriteLog($LogFilePath, $Output)
$LogFilePath, muss ich diese Variable noch oben im Script deklarieren?
Ja klar. Da muß der Pfad für die Datei rein
z.B.:
Global $LogFilePath = @ScriptDir & '\MeineUser.log'
[/autoit]Stimmt schon so oder? Wenn ja, es erstellts nich
[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")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount WHERE name = 'Install' ", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
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
Else
_FileWriteLog($LogFilePath, $Output)
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
Endif
Machst du keinen Syntax-Check?
Dann würdest du sofort die Fehlermeldung bekommen, dass "_FileWriteLog()" eine unbekannte Funktion ist.
Weil: #include <file.au3> fehlt
Haha gerade wollte ich das antworten, habs gemerkt...Ich hab eben immer dieses testfile offen xD! Sorry nochmals!!