Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 10833 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Per Batch aktuell angemeldete User auslesen (1)

Frage von Peter32 zum Thema Batch & Shell ...

Windows Server
Windows Server 2012 R2 Benutzerkonto für Zugriff auf AD Benutzer (1)

Frage von JulianOhm zum Thema Windows Server ...

Windows Tools
Automatischer FTP-Upload ohne angemeldeten Benutzer (5)

Frage von SarekHL zum Thema Windows Tools ...

Entwicklung
gelöst Get ip from external txt file and use in vbscript (5)

Frage von thankusomuch zum Thema Entwicklung ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...