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

Druckerinfos via VBScript auslesen - GOTO Syntax

Frage Entwicklung

Mitglied: Rony

Rony (Level 1) - Jetzt verbinden

13.08.2009, aktualisiert 18.10.2012, 8603 Aufrufe, 6 Kommentare

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 *http://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:
01.
DIM Druckernummer 
02.
On Error Resume Next 
03.
strComputer = "." 
04.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
05.
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48) 
06.
For Each objItem in colItems 
07.
 
08.
IF objItem.Name="SnagIt 8" then GoTo auslassen 
09.
IF objItem.Name="PDF Drucker (eDoc PDF Printer)" then GoTo auslassen 
10.
 
11.
Druckernummer=Druckernummer+1 
12.
Wscript.Echo "" 
13.
Wscript.Echo "" 
14.
Wscript.Echo "[Drucker"&Druckernummer&"]" 
15.
Wscript.Echo "Name=" & objItem.Name 
16.
Wscript.Echo "DriverName=" & objItem.DriverName 
17.
Wscript.Echo "PrintProcessor=" & objItem.PrintProcessor 
18.
Wscript.Echo "PrintJobDataType=" & objItem.PrintJobDataType 
19.
Wscript.Echo "PortName=" & objItem.PortName 
20.
 
21.
auslassen: 
22.
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]
Mitglied: 76109
13.08.2009 um 18:21 Uhr
Hallo Rony!

Die GoTo-Anweisung steht Dir in VBS leider nicht zur Verfügung.

Alternativ kannst Du es in etwa so machen:
01.
For Each... 
02.
 
03.
Ausgabe = True 
04.
If objItem.Name="SnagIt 8" Then Ausgabe = False 
05.
If objItem.Name="PDF Drucker (eDoc PDF Printer)" Then Ausgabe = False 
06.
 
07.
If Ausgabe = True Then 
08.
   .... 
09.
   .... 
10.
End If 
11.
 
12.
Next
Gruß Dieter
Bitte warten ..
Mitglied: bastla
13.08.2009 um 18:51 Uhr
Hallo Rony!

Nur auf die Schnelle eine Anmerkung zum Starten des Scripts: Wenn Du
cscript //nologo "Printer auslesen.vbs" > C:\temp\Printer_%ComputerName%.ini
verwendest, fallen die störenden Kopfzeilen weg ...
Doch noch was: Das einsame
DIM Druckernummer
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 Tags ...
Bitte warten ..
Mitglied: Rony
14.08.2009 um 08:26 Uhr
Hallo ihr beiden - ihr seid ja von der ganz schnellen Truppe! - Besten Dank für die super schnellen Infos!

@ didi1954
Dass es für VB keinen GoTo-Befehl gibt, konnte ich fast nicht glauben, wurde mir aber bereits mehrfach bestätigt *ärger*. So ne ähnliche Lösung habe ich auch schon ausprobiert, nur war ich der Meinung, dass das auch schlanker und schöner gehen müsste, eben mit Goto oder so...

Aber was ist mit dem Befehl *Next*? Den kennt VB doch sicher.
01.
IF objItem.Name="SnagIt 8" then Next
Dabei erhalte ich ebenfalls eine Fehlermeldung (Fehler: Unexpected 'Next'statement - Code: 800A041F). Was mache ich da denn falsch?

@ bastla
Super, die Kopfzeilen stören mich wirklich > guter Tip!
Was den Rest betrifft, wie gesagt, ich bin halt wirklich ein blutiger Anfänger. Aber für solche Infos bin ich immer dankbar. Also auch dir besten Dank!

@ alle Andern
Da wären noch die Fragen 2 und 3. Kann mir da jemand weiterhelfen?

Gruss
Rony
Bitte warten ..
Mitglied: 60730
14.08.2009, aktualisiert 18.10.2012
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.

01.
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" 
02.
 
03.
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:

01.
find "%computername%" "\\server\freigabe\hp2035.log" && goto end 
02.
reg query "HKLM\Software\Microsoft\Windows NT\Currentversion\Print\Printers\HP Laserjet P2035" && echo HP2035 auf %computername% installiert>>\\server\freigabe\hp2035.log && goto end 
03.
rundll32 printui.dll,PrintUIEntry /if /b "HP LaserJet P2035" /f "\\server\freigabe\HP2030.INF" /r "lpt1:" /m "HP LaserJet P2035" 
04.
: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 !
Sareks ähnlicher Fred
  • /edit
Bitte warten ..
Mitglied: bastla
14.08.2009 um 11:24 Uhr
Hallo Rony!
... dass das auch schlanker und schöner gehen müsste ...
Schlanker: etwas, schöner: ?
01.
On Error Resume Next 
02.
Ausnahme = "#SnagIt 8#PDF Drucker (eDoc PDF Printer)#Microsoft XPS Document Writer#Microsoft Office Document Image Writer#" 
03.
 
04.
strComputer = "." 
05.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
06.
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48) 
07.
For Each objItem in colItems 
08.
    If InStr(1, Ausnahme, "#" & objItem.Name & "#", vbTextCompare) = 0 Then 
09.
        Druckernummer=Druckernummer+1 
10.
        WScript.Echo 
11.
        WScript.Echo 
12.
        WScript.Echo "[Drucker"&Druckernummer&"]" 
13.
        WScript.Echo "Name=" & objItem.Name 
14.
        WScript.Echo "DriverName=" & objItem.DriverName 
15.
        WScript.Echo "PrintProcessor=" & objItem.PrintProcessor 
16.
        WScript.Echo "PrintJobDataType=" & objItem.PrintJobDataType 
17.
        WScript.Echo "PortName=" & objItem.PortName 
18.
    End If 
19.
Next
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
Bitte warten ..
Mitglied: Rony
14.08.2009 um 11:41 Uhr
Hallo TimoBeil

So eine ähnliche Lösung habe ich auch schon mal in Betracht gezogen. Aber da wir die Drucker lokal installiert haben, bringt mir das nicht so viel.

Eine INI-Datei wäre für uns die einfachste Lösung, da ich diese mit der Softwareverteilung auslesen und damit die Druckertreiber installieren kann.

So was wie:
01.
REM *** Port erstellen ... 
02.
cscript portmgr.vbs -a -h %PortName% -p %PortAdresse% -t %PrintJobDataType% -n 9100 
03.
 
04.
REM Installation eines Treibers via einer INF-Datei auf einem Share ... 
05.
cscript %vbsPfad%\prnmgr.vbs -a -f "%INFFILE%" -b "%Name%" -m "%DriverName%" -r %PortName%
Aber trotzdem besten Dank für deine Bemühungen!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

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

Frage von thankusomuch zum Thema Entwicklung ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

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 ...

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

Frage von Haures zum Thema Windows Server ...