Druckerinfos via VBScript auslesen - GOTO Syntax
Hallo Leute
Ich muss zugeben, ich kenne mich mit VB überhaupt nicht aus, obwohl mich das Thema tierisch interessieren würde. Aber die Zeit ...
Auf jeden Fall habe ich in diesem Forum ein Script gefunden *https://www.administrator.de/installierte_Drucker_auslesen.html*, das ich mir als Vorlage genommen habe und dieses nun anpassen/optimieren möchte.
Ausgangslage:
Ich möchte alle relevanten Infos der installieren Drucker auslesen und auf einem Share in eine INI-Datei schreiben, damit ich mittels dieser INI-Datei die Druckertreiber wieder installieren kann, wenn der Rechner mal neu aufgesetzt wird.
Mein Script sieht in etwa so aus:
Um die Daten in eine INI zu bekommen starte ich dieses Script wie folgt:
cscript "Printer auslesen.vbs" > C:\temp\Printer_%ComputerName%.ini
Das Resultat sollte dann etwa so aussehen:
Nun aber endlich zu meinem Problem
1. Ich möchte nur die Infos der physische Drucker auslesen, nicht aber die der "Softwaredrucker" (wie etwas SnagIt oder PDF Drucker)
Aus diesem Grund habe ich die Goto-Sprungmarke "> GoTo auslassen" eingebaut, aber das nimmt mir das Script übel! Offenbar ist es überrascht über mein GoTo
Fehler:
Zeile: 8
Zeichen: 33
Fehler: Expected statement
Code: 800A0400
Quelle: Microsoft VBScript compilation error
Ich hab's auch schon mit >>> IF objItem.Name="SnagIt 8" then Next <<< probiert, allerdings mitdem selben Resultat.
2. Über welchen Paramter könnte ich besser prüfen, ob es ich im einen "Software-Drucker" handelt (damit ich nicht jeden "Software-Drucker" im Script aufnehmen muss?
Also so was wie: IF objItem.Type="Software" then ..... oder so...
3. Für die Installation eines TCP/IP-Printer-Ports brächte ich neben dem Portnamen auf die Port-IP.
Also so was wie: Wscript.Echo "PortAdresse=" & objItem.PortIPAdress (erfunden)
Kennt jemand so einen Parameter?
Ich bin sicher, dass das nur kleine Anfängerfehler sind und entschuldige mich hier gleich mal dafür, dass ich als VB-Neuling so dumme Fragen stelle
Besten Dank für eure Hilfe.
[Edit Biber] Ein paar Code-Tags ergänzt [/Edit]
Ich muss zugeben, ich kenne mich mit VB überhaupt nicht aus, obwohl mich das Thema tierisch interessieren würde. Aber die Zeit ...
Auf jeden Fall habe ich in diesem Forum ein Script gefunden *https://www.administrator.de/installierte_Drucker_auslesen.html*, das ich mir als Vorlage genommen habe und dieses nun anpassen/optimieren möchte.
Ausgangslage:
Ich möchte alle relevanten Infos der installieren Drucker auslesen und auf einem Share in eine INI-Datei schreiben, damit ich mittels dieser INI-Datei die Druckertreiber wieder installieren kann, wenn der Rechner mal neu aufgesetzt wird.
Mein Script sieht in etwa so aus:
DIM Druckernummer
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48)
For Each objItem in colItems
IF objItem.Name="SnagIt 8" then GoTo auslassen
IF objItem.Name="PDF Drucker (eDoc PDF Printer)" then GoTo auslassen
Druckernummer=Druckernummer+1
Wscript.Echo ""
Wscript.Echo ""
Wscript.Echo "[Drucker"&Druckernummer&"]"
Wscript.Echo "Name=" & objItem.Name
Wscript.Echo "DriverName=" & objItem.DriverName
Wscript.Echo "PrintProcessor=" & objItem.PrintProcessor
Wscript.Echo "PrintJobDataType=" & objItem.PrintJobDataType
Wscript.Echo "PortName=" & objItem.PortName
auslassen:
Next
Um die Daten in eine INI zu bekommen starte ich dieses Script wie folgt:
cscript "Printer auslesen.vbs" > C:\temp\Printer_%ComputerName%.ini
Das Resultat sollte dann etwa so aussehen:
Microsoft (R) Windows Script Host, Version 5.7
Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten.
[Drucker1]
Name=HP 2000C TEST
DriverName=HP 2000C
PrintProcessor=WinPrint
PrintJobDataType=RAW
PortName=IP_xx.x.xxx.xxx
[Drucker2]
Name=SnagIt 8
DriverName=SnagIt 8 Printer
PrintProcessor=WinPrint
PrintJobDataType=RAW
PortName=C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\TechSmith\SnagIt 8\PrinterPortFile
[Drucker3]
Name=PDF Drucker (eDoc PDF Printer)
DriverName=eDocPrinter PDF Pro
PrintProcessor=WinPrint
PrintJobDataType=RAW
PortName=eDocPDF
etc.
Nun aber endlich zu meinem Problem
1. Ich möchte nur die Infos der physische Drucker auslesen, nicht aber die der "Softwaredrucker" (wie etwas SnagIt oder PDF Drucker)
Aus diesem Grund habe ich die Goto-Sprungmarke "> GoTo auslassen" eingebaut, aber das nimmt mir das Script übel! Offenbar ist es überrascht über mein GoTo
Fehler:
Zeile: 8
Zeichen: 33
Fehler: Expected statement
Code: 800A0400
Quelle: Microsoft VBScript compilation error
Ich hab's auch schon mit >>> IF objItem.Name="SnagIt 8" then Next <<< probiert, allerdings mitdem selben Resultat.
2. Über welchen Paramter könnte ich besser prüfen, ob es ich im einen "Software-Drucker" handelt (damit ich nicht jeden "Software-Drucker" im Script aufnehmen muss?
Also so was wie: IF objItem.Type="Software" then ..... oder so...
3. Für die Installation eines TCP/IP-Printer-Ports brächte ich neben dem Portnamen auf die Port-IP.
Also so was wie: Wscript.Echo "PortAdresse=" & objItem.PortIPAdress (erfunden)
Kennt jemand so einen Parameter?
Ich bin sicher, dass das nur kleine Anfängerfehler sind und entschuldige mich hier gleich mal dafür, dass ich als VB-Neuling so dumme Fragen stelle
Besten Dank für eure Hilfe.
[Edit Biber] Ein paar Code-Tags ergänzt [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 122707
Url: https://administrator.de/contentid/122707
Ausgedruckt am: 08.11.2024 um 07:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Rony!
Die GoTo-Anweisung steht Dir in VBS leider nicht zur Verfügung.
Alternativ kannst Du es in etwa so machen:
Gruß Dieter
Die GoTo-Anweisung steht Dir in VBS leider nicht zur Verfügung.
Alternativ kannst Du es in etwa so machen:
For Each...
Ausgabe = True
If objItem.Name="SnagIt 8" Then Ausgabe = False
If objItem.Name="PDF Drucker (eDoc PDF Printer)" Then Ausgabe = False
If Ausgabe = True Then
....
....
End If
Next
Gruß Dieter
Hallo Rony!
Nur auf die Schnelle eine Anmerkung zum Starten des Scripts: Wenn Du
verwendest, fallen die störenden Kopfzeilen weg ...
Doch noch was: Das einsame
wirkt irgendwie niedlich - mein Standpunkt dazu: Entweder alle Variablen deklarieren (und dann natürlich "Option Explicit" verwenden), oder keine ...
Grüße
bastla
P.S.: Zum Posten von Code hätten wir hier passende ...
Nur auf die Schnelle eine Anmerkung zum Starten des Scripts: Wenn Du
cscript //nologo "Printer auslesen.vbs" > C:\temp\Printer_%ComputerName%.ini
Doch noch was: Das einsame
DIM Druckernummer
Grüße
bastla
P.S.: Zum Posten von Code hätten wir hier passende ...
Servus,
ich bezweifel mal, das dir der Ansatz wirklich etwas mehr als reine Information bringt.
Anbei kein vbs, sondern eine Batch, die ich mal zur Umstellung gebraucht habe.
Damit kannst du die Drucker zumindestens genauer durchleuchten und einrichten.
Wenn du einen Printserver hast - dann rate ich dir - installier dort alle Drucker, die es im Netz gibt und via:
kannst du dann nach einer Neuinstallation gezielt Druckertreiber verteilen.
Wobei das obige Beispiel / letze Script genau 3 Tage alt ist, weil wir gerade den HP 2035 überall ausrollen.
Von daher - wenn - du dir schon die Mühe machst, dann auch so, dass es nacher "mühelos" läuft
Das ist ein funktionierender "Ansatz", den man rel. einfach umstricken kann.
Gruß
ich bezweifel mal, das dir der Ansatz wirklich etwas mehr als reine Information bringt.
Anbei kein vbs, sondern eine Batch, die ich mal zur Umstellung gebraucht habe.
if not exist \\server\Freigabe\!user2printer\printserver\%computername%.reg regedit /e \\server\Freigabe\!user2printer\printserver\%computername%.reg "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print"
if not exist \\server\Freigabe\!user2printer\%computername%-%username%.reg regedit /e \\server\Freigabe\!user2printer\%computername%-%username%.reg HKEY_CURRENT_USER\Printers\Connections
Damit kannst du die Drucker zumindestens genauer durchleuchten und einrichten.
Wenn du einen Printserver hast - dann rate ich dir - installier dort alle Drucker, die es im Netz gibt und via:
find "%computername%" "\\server\freigabe\hp2035.log" && goto end
reg query "HKLM\Software\Microsoft\Windows NT\Currentversion\Print\Printers\HP Laserjet P2035" && echo HP2035 auf %computername% installiert>>\\server\freigabe\hp2035.log && goto end
rundll32 printui.dll,PrintUIEntry /if /b "HP LaserJet P2035" /f "\\server\freigabe\HP2030.INF" /r "lpt1:" /m "HP LaserJet P2035"
:end
kannst du dann nach einer Neuinstallation gezielt Druckertreiber verteilen.
Wobei das obige Beispiel / letze Script genau 3 Tage alt ist, weil wir gerade den HP 2035 überall ausrollen.
Von daher - wenn - du dir schon die Mühe machst, dann auch so, dass es nacher "mühelos" läuft
Das ist ein funktionierender "Ansatz", den man rel. einfach umstricken kann.
Gruß
- edit
- Nachtrag - die Scripte sind selbstverfreilich Psexec Scripte !
- /edit
Hallo Rony!
Das Trennzeichen "#" soll natürlich im Druckernamen nicht vorkommen, daher bei Bedarf in den Zeilen 2 und 8 austauschen ...
Zu den Fragen 2 und 3 habe ich leider weiterhin keine Antwort ...
Grüße
bastla
... dass das auch schlanker und schöner gehen müsste ...
Schlanker: etwas, schöner: ?On Error Resume Next
Ausnahme = "#SnagIt 8#PDF Drucker (eDoc PDF Printer)#Microsoft XPS Document Writer#Microsoft Office Document Image Writer#"
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48)
For Each objItem in colItems
If InStr(1, Ausnahme, "#" & objItem.Name & "#", vbTextCompare) = 0 Then
Druckernummer=Druckernummer+1
WScript.Echo
WScript.Echo
WScript.Echo "[Drucker"&Druckernummer&"]"
WScript.Echo "Name=" & objItem.Name
WScript.Echo "DriverName=" & objItem.DriverName
WScript.Echo "PrintProcessor=" & objItem.PrintProcessor
WScript.Echo "PrintJobDataType=" & objItem.PrintJobDataType
WScript.Echo "PortName=" & objItem.PortName
End If
Next
Zu den Fragen 2 und 3 habe ich leider weiterhin keine Antwort ...
Grüße
bastla