Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBScript, das aktuell angemeldete Benutzer und deren Workstations ausliest

Frage Entwicklung VB for Applications

Mitglied: kalle10000

kalle10000 (Level 1) - Jetzt verbinden

19.07.2007, aktualisiert 18.10.2012, 11142 Aufrufe, 18 Kommentare

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.
Mitglied: bastla
19.07.2007 um 22:16 Uhr
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:

01.
Set objShell = CreateObject("WScript.Shell") 
02.
Set objWshScriptExec = objShell.Exec("net view") 
03.
'Zum Abfangen der "net view"Ausgabe stdOut verwenden 
04.
Set objStdOut = objWshScriptExec.StdOut 
05.
'gesamte "net view"-Ausgabe in strOutput speichern ... 
06.
strOutput = objStdOut.ReadAll 
07.
'... und in einzelne Zeilen zerlegen (am Zeilenende = vbCrLF splitten), die als Array gespeichert werden. 
08.
aLines = Split(strOutput, vbCrLF) 
09.
'Variable für die Zusammenfassung initialisieren 
10.
strResult = "" 
11.
'Schleife über alle einzelnen Zeilen 
12.
For i = 0 To UBound(aLines) 
13.
	'Wenn die Zeile mit "\\" beginnt, ... 
14.
	If Left(aLines(i), 2) = "\\" Then 
15.
		'... enthält sie ab Position 3 einen Rechnernamen. 
16.
		strCmp = Trim(Mid(aLines(i), 3)) 
17.
		'Falls beim Abfragen des Computers ein Fehler eintritt, nicht abbrechen ... 
18.
		On Error Resume Next 
19.
		'Ab dem zweiten gefundenen Rechner (wenn strResult also schon ein Ergebnis enthält) ... 
20.
		If strResult <> "" Then 
21.
			'... zunächst eine Zeilenschaltung und dann Computernamen und User hinzufügen. 
22.
			strResult = strResult & vbCrLF & strCmp & vbTab & UserName(strCmp) 
23.
		Else 
24.
			'Beim ersten Eintrag ist die Zeilenschaltung nicht nötig. 
25.
			strResult = strCmp & vbTab & UserName(strCmp) 
26.
		End If 
27.
		'Ab hier wieder bei einem Fehler abbrechen ... 
28.
		On Error Goto 0 
29.
	End If 
30.
Next 
31.
'Das Ergebnis in einer Form ausgeben, die auch den Aufruf aus einer Batchdatei ermöglicht: 
32.
WScript.Echo strResult 
33.
WScript.Quit 
34.
 
35.
Function UserName(strComputer) 
36.
'Abfrage des beim Funktionsaufruf übergebenen Computernamens per WMI 
37.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  
38.
Set colItems = objWMIService.ExecQuery( _ 
39.
    "SELECT * FROM Win32_ComputerSystem",,48)  
40.
'Auch wenn nur ein Computer abgefragt wird, ist das Ergebnis eine Aufzählung, 
41.
'deren einzelne Elemente mit "For Each" durchlaufen werden ... 
42.
For Each objItem in colItems 
43.
	'Den Usernamen als Eigenschaft auslesen und zwischenspeichern ... 
44.
    strUser = objItem.UserName 
45.
Next 
46.
'... und falls kein User angemeldet ist, Infotext erzeugen. 
47.
If IsNull(strUser) Then strUser = "No User" 
48.
'Function-Ergebnis festlegen 
49.
UserName = strUser 
50.
End Function
Aufrufen könnte man dieses Script zB auch von der Kommandozeile mit
01.
cscript //nologo C:\Scripts\ListLogons.vbs
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]
Bitte warten ..
Mitglied: Biber
20.07.2007 um 00:20 Uhr
Moin kalle10000,

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
Bitte warten ..
Mitglied: kalle10000
20.07.2007 um 10:05 Uhr
Ich bin echt gerührt, dass ich hier so schnell eine Lösung habe. Besten Dank. Ich werde mir das jetzt erst mal in Ruhe ansehen und dann ausprobieren.

Verschiedene Tools habe ich dafür auch schon gefunden. Eins davon war sogar Freeware "NEWTFreeware". Für meine Zwecke war das ausreichend, aber ich muss mal so langsam VBScripting lernen.

Nochmal besten Dank.

Mal sehen. Vielleicht habe ich gleich nochmal eine Frage.
Bitte warten ..
Mitglied: kalle10000
20.07.2007 um 10:31 Uhr
Das Script ist ja der Hammmer? Wie lange hast Du dafür gebraucht?
Bitte warten ..
Mitglied: bastla
20.07.2007, aktualisiert 18.10.2012
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 ...
Bitte warten ..
Mitglied: kalle10000
20.07.2007 um 11:19 Uhr
Danke für die weiteren Links. Die schaue ich mir mal als nächstes an.

Das Script habe ich gerade ausgeführt. Leider muss irgendwo ein klitzekleiner Fehler drin sein.
Die Ausgabe ist leer. Da steht nix drin .
Bitte warten ..
Mitglied: bastla
20.07.2007 um 11:27 Uhr
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
01.
aLines = Array("\\PC1", "\\PC2", "\\PC3")
als neue Zeile einfügen

Grüße
bastla
Bitte warten ..
Mitglied: kalle10000
20.07.2007 um 11:30 Uhr
An den Rechten kann es nicht liegen. Ich bin als Domänen-Admin angemeldet.
Bitte warten ..
Mitglied: bastla
20.07.2007 um 11:32 Uhr
OK, eine Möglichkeit abgehakt.

Ansonsten siehe Ergänzungen oben ...

Grüße
bastla
Bitte warten ..
Mitglied: kalle10000
20.07.2007 um 11:39 Uhr
C:\Scripts\ListLogons.vbs(37, 1) Laufzeitfehler in Microsoft VBScript: Der Remoteservercomputer ist existiert nicht oder ist nicht verfügbar: 'GetObject'

steht dort, nachdem ich das "on Error Resume Next" auskommentiert habe.

Das mit dem Array probiere ich jetzt.
Bitte warten ..
Mitglied: kalle10000
20.07.2007 um 11:44 Uhr
Bei dem Array kommt genau dieselbe Fehlermeldung.

Ah Stop, ich habe die Zeile nicht zusätzlich eingefügt, sondern ausgetauscht.

Das werde ich jetzt erst mal testen.
Bitte warten ..
Mitglied: bastla
20.07.2007 um 11:44 Uhr
Hallo kalle10000!

Vermutlich liegt es daran, dass hinter dem Computernamen noch Leerstellen enthalten sind - ergänze die Zeile
01.
strCmp = <b>Trim(</b>Mid(aLines(i), 3)<b>)</b>
Ist mir leider auch gerade erst aufgefallen ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
20.07.2007 um 11:57 Uhr
... und wenn ich schon am Beheben der Fehler bin:
01.
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]
Bitte warten ..
Mitglied: kalle10000
20.07.2007 um 12:00 Uhr
Hi Bastla,

daran liegt es leider auch nicht. Die Nammenskonventionen sehen wie folgt aus.

ABCW0001, ABCW0002 ... ABCW0025

Da sind keine Leerzeichen dazwischen.
Bitte warten ..
Mitglied: bastla
20.07.2007 um 12:08 Uhr
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
01.
"ABCW0001                                                      "
ermittelt wurde.

Mit der angegebenen Änderung läuft es jetzt bei mir über alle Rechner durch ...

Grüße
bastla
Bitte warten ..
Mitglied: kalle10000
20.07.2007 um 12:20 Uhr
Hallo Bastla,

korrekt, dass es bei Dir läuft. Das gibt Hoffnung.
Bei mir geht es aber noch nicht.
Was bekommst Du denn bei 'net view' alles angezeigt?
Ist bei Dir die 2. Spalte auch ausgefüllt?

Vielleicht könntest mir nochmal bitte das funktionierende Script posten.

Und schon mal einen RIESENDANK für Deine Mühe.
Bitte warten ..
Mitglied: kalle10000
20.07.2007 um 12:55 Uhr
Mh, komische effects. Jetzt funktioniert das Script bei 12 PC und 10 weitere werden nicht berücksichtigt.
Bitte warten ..
Mitglied: kalle10000
02.08.2007 um 15:22 Uhr
Hier noch mal die endgültige Version:
Firewalls müssen auf den Workstations ausgeschaltet sein.
Besten Dank nochmal für die Hilfe.


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))
On Error Resume Next
strCompi = Split(strCmp, " ")
strCmp = strCompi(0)
'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

Gruss Kalle
Bitte warten ..
Ähnliche Inhalte
Windows Server
Benutzer mit Admin Rechten muss angemeldet bleiben
Frage von Knigge111Windows Server28 Kommentare

Hallo liebe Mitstreiter in der verrückten IT Welt! :-) Mir stellt sich folgendes Problem: "Ironie on": Eine ganz toll ...

Windows Tools
Automatischer FTP-Upload ohne angemeldeten Benutzer
Frage von SarekHLWindows Tools5 Kommentare

Hallo zusammen, kennt jemand ein Programm wie den FTP-Watchdog, welches als Dienst konzipiert ist? Ich möchte auf einem Server ...

Windows Server
Teamviewer-IDs von angemeldeten Benutzern auslesen
Tipp von BirdyBWindows Server10 Kommentare

Auch wenn es im Allgemeinen verpönt ist, nutzen wir derzeit noch den Teamviewer für den Remotesupport. Unter Anderem läuft ...

Monitoring
Aktuell angemeldete User und Rechnernamen im Netzwerk ermitteln
gelöst Frage von KgFmBMonitoring12 Kommentare

Hallo zusammen, sicher ist diese Frage schon x-mal gestellt worden, aber bisher habe ich noch nicht das gefunden, was ...

Neue Wissensbeiträge
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 7 StundenMikroTik RouterOS4 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 7 StundenSicherheit

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 10 StundenAdministrator.de Feedback9 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 14 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail
Frage von ahstaxVisual Studio24 Kommentare

Hallo, ich möchte gerne ein vb.net-Tool schreiben, das am Ende eine Outlook-E-Mail erzeugt. Grundsätzlich ist mir klar, wie das ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...