superwasi
Goto Top

Netzwerkdrucker per vbs auslesen

Hallo.

Ich würde gerne wissen, wie ich per Remote alle Drucker, das heisst auch die Netzwerkdrucker, von andren PCs anzeigen lassen kann.

Ich habe ein kleines Script geschrieben, das mir aber nur lokal sämtlichen Drucker anzeigt.

Wenn man die Drucker eines anderen PCs auslesen möchte, werden nur die lokal installierten ausgegeben.


Hier mein Script:


On Error Resume Next
strComputer=inputbox("Bitte geben sie die IP oder den Hostnamen des gewünschten PCs an," _
& "auf dem die Drucker ausgelesen werden sollen!")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48)
For Each objItem in colItems
Wscript.Echo "Name: " & objItem.Name
Next


Könnte mir vielleicht jemand bei diesem Problem helfen?

Danke für eure Antworten im voraus!

Content-ID: 94094

Url: https://administrator.de/contentid/94094

Ausgedruckt am: 26.11.2024 um 03:11 Uhr

colinardo
colinardo 11.08.2008 um 13:54:54 Uhr
Goto Top
das sollte gehen ...
strComputer = InputBox("Bitte IP-Adresse des PC's eingeben:","Installierte Drucker abrufen")  
strUsername = InputBox("Bitte Username eines Administrators des Remotesystems eingeben:","Installierte Drucker abrufen")  
strPassword = InputBox("Bitte Password des Administrators eingeben:","Installierte Drucker abrufen")  
Const WbemAuthenticationLevelPktPrivacy = 6
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")  
Set objWMIService = objwbemLocator.ConnectServer(strComputer, "root\cimv2", strUsername, strPassword)  
objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
Set objPrinters = objWMIService.ExecQuery("Select * From Win32_Printer")  

For Each objPrinter In objPrinters
	WScript.Echo objPrinter.Name
Next


Das folgende Script benutz ein Array in dem die IP-Adressen der Computer stehen und schreibt die Drucker der jeweiligen Maschine in eine Textdatei:
Das Array ist an die jeweiligen Rechner anzupassen... // Achtung: Der angegebene User muss auf allen PC's Admin-Rechte besitzen. In der Domänenumgebung ist dieser in folgender Form anzugeben: "DOMÄNE\USER"

On Error Resume Next
Const WbemAuthenticationLevelPktPrivacy = 6
strUsername = InputBox("Bitte Username eines Administrators des Remotesystems eingeben:","Installierte Drucker abrufen")  
strPassword = InputBox("Bitte Password des Administrators eingeben:","Installierte Drucker abrufen")  
Set fso = CreateObject("scripting.filesystemobject")  

strComputers = Array("10.10.1.5","10.10.1.6")  

For i = 0 To UBound(strComputers)
	strComputer = strComputers(i)
	Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")  
	Set objWMIService = objwbemLocator.ConnectServer(strComputer, "root\cimv2", strUsername, strPassword)  
	objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
	Set objPrinters = objWMIService.ExecQuery("Select * From Win32_Printer")  
	Set txtfile = fso.OpenTextFile("c:\temp\Drucker_von_" & strComputer & ".txt", 2, True)  
	For Each objPrinter In objPrinters
		txtfile.WriteLine objPrinter.Name
	Next
	txtfile.Close
Next
superwasi
superwasi 11.08.2008 um 14:18:46 Uhr
Goto Top
Danke Stofmeister für deine Antwort.

Ich habe nur noch ein Problem.

Ich habe das Tool gerade getested und es ist genau das was ich gesucht habe.

Aber es funktioniert nur wenn ich den aktuell angemeldeten User eintrage.

Wenn ich als User den lokal Admin oder einen Sysacount benutze, bekomme ich immer die Fehlermeldung, dass der Zugriff verweigert wurde.

Wüsstest du vielleicht eine Variante in der es auch mit dem lokal admin funktioniert.

Danke im voraus für deine Antwort.
colinardo
colinardo 11.08.2008 um 14:23:15 Uhr
Goto Top
Du musst einen Admin des anderen Rechners angeben und nicht einen lokalen Admin. Eine Variante ohne Password ? das wäre ein großes Sicherheitsloch. Du kannst auf dem anderen PC einen extra Admin anlegen der für solche Zwecke dient. Wenn dieser den gleichen Namen und das gleiche Passwort besitzt dann geht der Zugriff auch mit deinem ersten Script.
Ebenfalls Vorraussetzung ist das auf der anderen Maschine die "Remote Administration" Ausnahme in der Firewall freigegeben ist...
Kommandozeile dafür:
netsh firewall set service REMOTEADMIN ENABLE SUBNET

mfg Uwe face-wink
superwasi
superwasi 11.08.2008 um 14:40:56 Uhr
Goto Top
Sorry Stofmeister, das kannst du ja nicht wissen.

Bei uns in der Firma hat jeder lokal Admin das gleiche Passwort.


Müsste es dann nicht auch mit dem lokal admin gehen?

Der Firewalldienst ist bei uns standartmässig deaktiviert, dieser müsste also keine Wirkung haben. Oder sehe ich das falsch.

Danke nochmals für deine Antworten.
colinardo
colinardo 11.08.2008 um 14:56:48 Uhr
Goto Top
Wie ich sehe hast du ein Authentifizierungsproblem.
Wenn du dich mit deinem aktuellen Usernamen und Password an dem anderen PC authentifizieren willst muss im Script die folgende Zeile geändert werden:

Const WbemAuthenticationLevelPktPrivacy = 0

Diese Zeile definiert die Art und Weise wie sich das Script gegenüber dem PC ausweist.

Wenn du Wert "0" benutzt muss in dieser Zeile der Benutzername und das Passwort herausgenommen werden:

Set objWMIService = objwbemLocator.ConnectServer(strComputer, "root\cimv2")   



Folgende Werte für Authentifizierung sind möglich :

WbemAuthenticationLevelDefault

Short name: Default

WMI uses the default Windows Authentication setting.

WbemAuthenticationLevelNone
1
Short name: None

Uses no authentication.

WbemAuthenticationLevelConnect
2
Short name: Connect

Authenticates the credentials of the client only when the client establishes a relationship with the server.

WbemAuthenticationLevelCall
3
Short name: Call

Authenticates only at the beginning of each call when the server receives the request.

WbemAuthenticationLevelPkt
4
Short name: Pkt

Authenticates that all data received is from the expected client.

WbemAuthenticationLevelPktIntegrity
5
0x5
Short name: PktIntegrity

Authenticates and verifies that none of the data transferred between client and server has been modified.

WbemAuthenticationLevelPktPrivacy
6
0x6
Short name: PktPrivacy

Authenticates all previous impersonation levels and encrypts the argument value of each remote procedure call.


weitere infos dazu findest du hier : MSDN
superwasi
superwasi 11.08.2008 um 15:07:53 Uhr
Goto Top
Super!

Danke für deine kompetente Hilfe.

Ich wünsche dir noch einen schönen Tag.