VBScript, das aktuell angemeldete Benutzer und deren Workstations ausliest
Hallo,
ich fange gerade mit VBScripten an und komme irgendwie noch gar nicht zurecht.
Das Script soll alle aktuell angemeldeten Benutzer im Netzwerk + Workstation, an der sie gerade sitzen, anzeigen;
oder alle angemeldeten Workstations + Benutzer wäre auch ok.
Für jeden Hinweis, wo ich nachgucken könnte, wäre ich dankbar.
Thx, im Voraus.
PS: Eine batch-Datei nehm ich zur Not auch.
ich fange gerade mit VBScripten an und komme irgendwie noch gar nicht zurecht.
Das Script soll alle aktuell angemeldeten Benutzer im Netzwerk + Workstation, an der sie gerade sitzen, anzeigen;
oder alle angemeldeten Workstations + Benutzer wäre auch ok.
Für jeden Hinweis, wo ich nachgucken könnte, wäre ich dankbar.
Thx, im Voraus.
PS: Eine batch-Datei nehm ich zur Not auch.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 64231
Url: https://administrator.de/contentid/64231
Ausgedruckt am: 17.11.2024 um 17:11 Uhr
18 Kommentare
Neuester Kommentar
Hallo kalle10000!
Schematisch könnte das etwa so aussehen: Unter Verwendung des CMD-Befehles "net view" eine Liste der Computer ermitteln und diese dann über WMI nach dem angemeldeten User abzufragen:
Aufrufen könnte man dieses Script zB auch von der Kommandozeile mit
bzw mit dem Zusatz ">D:\Logons.txt" auch die Ergebnisse in eine Textdatei schreiben.
Voraussetzung ist, das Script unter einem Konto mit ausreichenden Rechten für die einzelnen Rechner (Domänen-Administrator sollte genügen ) auszuführen.
Zu überlegen wäre ev noch, vor der WMI-Abfrage sicher zu stellen, dass der Computer noch online ist sowie die Form der Ausgabe.
Grüße
bastla
[Edit] Fehler (siehe unten) korrigiert ... [/Edit]
Schematisch könnte das etwa so aussehen: Unter Verwendung des CMD-Befehles "net view" eine Liste der Computer ermitteln und diese dann über WMI nach dem angemeldeten User abzufragen:
Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec("net view")
'Zum Abfangen der "net view"Ausgabe stdOut verwenden
Set objStdOut = objWshScriptExec.StdOut
'gesamte "net view"-Ausgabe in strOutput speichern ...
strOutput = objStdOut.ReadAll
'... und in einzelne Zeilen zerlegen (am Zeilenende = vbCrLF splitten), die als Array gespeichert werden.
aLines = Split(strOutput, vbCrLF)
'Variable für die Zusammenfassung initialisieren
strResult = ""
'Schleife über alle einzelnen Zeilen
For i = 0 To UBound(aLines)
'Wenn die Zeile mit "\\" beginnt, ...
If Left(aLines(i), 2) = "\\" Then
'... enthält sie ab Position 3 einen Rechnernamen.
strCmp = Trim(Mid(aLines(i), 3))
'Falls beim Abfragen des Computers ein Fehler eintritt, nicht abbrechen ...
On Error Resume Next
'Ab dem zweiten gefundenen Rechner (wenn strResult also schon ein Ergebnis enthält) ...
If strResult <> "" Then
'... zunächst eine Zeilenschaltung und dann Computernamen und User hinzufügen.
strResult = strResult & vbCrLF & strCmp & vbTab & UserName(strCmp)
Else
'Beim ersten Eintrag ist die Zeilenschaltung nicht nötig.
strResult = strCmp & vbTab & UserName(strCmp)
End If
'Ab hier wieder bei einem Fehler abbrechen ...
On Error Goto 0
End If
Next
'Das Ergebnis in einer Form ausgeben, die auch den Aufruf aus einer Batchdatei ermöglicht:
WScript.Echo strResult
WScript.Quit
Function UserName(strComputer)
'Abfrage des beim Funktionsaufruf übergebenen Computernamens per WMI
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_ComputerSystem",,48)
'Auch wenn nur ein Computer abgefragt wird, ist das Ergebnis eine Aufzählung,
'deren einzelne Elemente mit "For Each" durchlaufen werden ...
For Each objItem in colItems
'Den Usernamen als Eigenschaft auslesen und zwischenspeichern ...
strUser = objItem.UserName
Next
'... und falls kein User angemeldet ist, Infotext erzeugen.
If IsNull(strUser) Then strUser = "No User"
'Function-Ergebnis festlegen
UserName = strUser
End Function
Aufrufen könnte man dieses Script zB auch von der Kommandozeile mit
cscript //nologo C:\Scripts\ListLogons.vbs
Voraussetzung ist, das Script unter einem Konto mit ausreichenden Rechten für die einzelnen Rechner (Domänen-Administrator sollte genügen ) auszuführen.
Zu überlegen wäre ev noch, vor der WMI-Abfrage sicher zu stellen, dass der Computer noch online ist sowie die Form der Ausgabe.
Grüße
bastla
[Edit] Fehler (siehe unten) korrigiert ... [/Edit]
Moin kalle10000,
zu bastlas Lösungsskizzen ist ja erfahrungsgemäß wenig hinzuzufügen.
Nur als Fussnote noch die Hinweise:
Ich würde jedenfalls das Werkzeug ( Batch/Bordmittel, VBS/WMI, Professionelle Tools...) schon von dem Zweck abhängig machen, den Du verfolgst.
Grüße
Biber
zu bastlas Lösungsskizzen ist ja erfahrungsgemäß wenig hinzuzufügen.
Nur als Fussnote noch die Hinweise:
- Falls Du Dich irgendwelchen Illusionen bezüglich der Geschwindigkeit in einer mittelprächtigen Domäne hingeben solltest.... teste das Skriptchen erstmal mit einer Testliste von 3 Rechnern.
- Ein vielfaches schneller als der CMD-Interpreter und auch als der VBS-Interpreter sind natürlich kostenlose One-Trick-Executables wie z.B. die PsLoggedOn.exe [von www.SysInternals.com... bzw. irgend so ein Multi hat die jetzt gekauft]
- und es gibt natürlich auch richtig gute Bezahlware... da hast Du solche Features in Professionell und auf Klicki-Bunti. Für 6-8 Monatsgehälter allerdings.
Ich würde jedenfalls das Werkzeug ( Batch/Bordmittel, VBS/WMI, Professionelle Tools...) schon von dem Zweck abhängig machen, den Du verfolgst.
Grüße
Biber
Hallo kalle10000!
Halb so wild - gibt's ja alles schon zu finden, zB für den "net view"-Teil: http://www.microsoft.com/technet/community/columns/scripts/sg1002.mspx)
und für WMI sehr zu empfehlen: WMI Code Creator v1.0
Mehr Links habe ich hier versteckt.
Grüße
bastla
P.S.: Am längsten gebraucht habe ich für die Kommentare - aber Du hast Dich ja als Anfänger deklariert, da wollte ich etwas weiter ausholen ...
Halb so wild - gibt's ja alles schon zu finden, zB für den "net view"-Teil: http://www.microsoft.com/technet/community/columns/scripts/sg1002.mspx)
und für WMI sehr zu empfehlen: WMI Code Creator v1.0
Mehr Links habe ich hier versteckt.
Grüße
bastla
P.S.: Am längsten gebraucht habe ich für die Kommentare - aber Du hast Dich ja als Anfänger deklariert, da wollte ich etwas weiter ausholen ...
Hallo kalle10000!
Nimm das "On Error Resume Next" raus (Kommentar setzen), dann siehst Du auch die entsprechenden Fehlermeldungen. Ansonsten nochmals der Hinweis auf die Berechtigungen ...
Falls Du nur mit einigen Clients testen willst, einfach nach der "aLines=..."-Zeile
als neue Zeile einfügen
Grüße
bastla
Nimm das "On Error Resume Next" raus (Kommentar setzen), dann siehst Du auch die entsprechenden Fehlermeldungen. Ansonsten nochmals der Hinweis auf die Berechtigungen ...
Falls Du nur mit einigen Clients testen willst, einfach nach der "aLines=..."-Zeile
aLines = Array("\\PC1", "\\PC2", "\\PC3")
Grüße
bastla
... und wenn ich schon am Beheben der Fehler bin:
Wie Du siehst, war da Ganze nicht sehr ausführlich getestet (für den "net view"-Teil eine Ausgabe der Variable strOutput, für den Rest passende Computernamen als Array - wie oben beschrieben - übergeben) ...
Grüße
bastla
[Edit] Korrekturen oben eingearbeitet. [/Edit]
If IsNull(strUser) Then strUs<b>e</b>r = "No User"
Wie Du siehst, war da Ganze nicht sehr ausführlich getestet (für den "net view"-Teil eine Ausgabe der Variable strOutput, für den Rest passende Computernamen als Array - wie oben beschrieben - übergeben) ...
Grüße
bastla
[Edit] Korrekturen oben eingearbeitet. [/Edit]
Hallo kalle10000!
Ich meinte nicht "Leerzeichen dazwischen", sondern dass eine Zeile der "net view"-Ausgabe am Ende noch mit Leerstellen aufgefüllt war, womit der Computername dann nach dem Abschneiden der "\\" als zB
ermittelt wurde.
Mit der angegebenen Änderung läuft es jetzt bei mir über alle Rechner durch ...
Grüße
bastla
Ich meinte nicht "Leerzeichen dazwischen", sondern dass eine Zeile der "net view"-Ausgabe am Ende noch mit Leerstellen aufgefüllt war, womit der Computername dann nach dem Abschneiden der "\\" als zB
"ABCW0001 "
Mit der angegebenen Änderung läuft es jetzt bei mir über alle Rechner durch ...
Grüße
bastla