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!
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!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 94094
Url: https://administrator.de/contentid/94094
Ausgedruckt am: 26.11.2024 um 03:11 Uhr
6 Kommentare
Neuester Kommentar
das sollte gehen ...
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"
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
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:
mfg Uwe
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
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:
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:
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
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