Die Windows CMD bietet eine brauchbare Druckerverwaltung in der Kommandozeile an.
Dank der printui.dll, die ihr mit der rundll32.exe ansprecht und die alle nötigen Werkzeuge enthält, könnt ihr Drucker hinzufügen, verwaltungen, löschen und mehr.
Dadurch lassen sich bestimmte Jobs wunderbar in Scripte packen.
Code Grundgerüst:
rundll32.exe printui.dll,PrintUIEntry /Parameter
Groß- und Kleinschreibung bei PrintUIEntry beachten, case sensitive.
Nun schauen wir auf die Möglichkeiten von printui.dll.
/a | [Datei] Name der Binärdatei |
/b | [Name] Basisdruckername |
/c | [Name] UNC-Computername, wenn der Vorgang auf einem Remotecomputer ausgeführt wird. |
/dl | Löscht den lokalen Drucker. |
/dn | Löscht die Netzwerkdruckerverbindung. |
/dd | Löscht den Druckertreiber. |
/e | Zeigt Druckeinstellungen an. |
/f | [Datei] Entweder INF-Datei oder Ausgabedatei. |
/ga | Fügt Druckerverbindungen pro Maschine hinzu. |
/ge | Listet Druckerverbindungen pro Maschine auf. |
/gd | Löscht Druckerverbindungen pro Maschine. |
/h | [Arch] Treiberarchitektur Alpha | Intel | Mips | PowerPC. |
/ia | Installiert Druckertreiber mithilfe einer INF-Datei. |
/id | Installiert Druckertreiber mithilfe des Assistenten. |
/if | Installiert Drucker mithilfe der angegebenen INF-Datei. |
/ii | Installiert Drucker mithilfe des Assistenten und einer INF-Datei. |
/il | Installiert Drucker mithilfe des Assistenten. |
/in | Fügt eine Netzwerkdruckerverbindung hinzu. |
/j | [Anbieter] Druckanbietername |
/k | Druckt eine Testseite auf dem angegebenen Drucker aus. Kann bei der Druckerinstallation nicht verwendet werden. |
/l | [Pfad] Quellpfad des Druckertreibers |
/m | [Modell] Modellname des Druckertreibers |
/n | [Name] Druckername |
/o | Zeigt die Druckerwarteschlange an. |
/p | Zeigt Druckereigenschaften an. |
/q | Stiller Modus. Fehlermeldungen werden nicht angezeigt. |
/r | [Anschluss] Anschlussname (Hier auch die Möglichkeit Lokale Schnittstellen, anstelle des UNC Pfades anzugeben) |
/s | Zeigt Servereigenschaften an. |
/Ss | Speichert Druckereinstellungen in einer Datei. |
/Sr | Stellt Druckereinstellungen aus einer Datei wieder her. Speichert Optionsattribute für Druckereinstellungen oder stellt diese wieder her. Die Attribute müssen am Ende des Befehls stehen: 2 PRINTER_INFO_2 7 PRINTER_INFO_7 c Farbprofil d Druckerdaten s Sicherheitsbeschreibung g Globaler DevMode m Minimale Einstellungen u Benutzer-DevMode r Namenskonflikte lösen f Namen erzwingen p Anschluss zuordnen |
/u | Verwendet den vorhandenen Druckertreiber, sofern bereits einer installiert ist |
/t | [#] Nullbasierte Indexseite zum Starten |
/v | [Version] Eine der folgenden Treiberversionen: Windows 95 oder 98 | Windows NT 3.1 | Windows NT 3.5 oder 3.51 | Windows NT 3.51 | Windows NT 4.0 | Windows NT 4.0 oder 2000 | Windows 2000 |
/w | Fordert einen Treiber an, wenn der angegebene Treiber nicht in der INF-Datei gefunden wird. |
/y | Richtet den Drucker als Standarddrucker ein. |
/Xg | Liest Druckereinstellungen. |
/Xs | Richtet Druckereinstellungen ein. |
/z | Gibt diesen Drucker nicht automatisch frei. |
/Z | Gibt diesen Drucker frei. Verwendung nur mit der Option /if möglich. |
/? | Zeigt diese Hilfemeldung an. |
@ | [Datei] Datei mit Befehlszeilenargumenten |
Die Tabelle ist von Mark Heitbrink von gruppenrichtlinien.de.
Die volle Hilfe, printui.dll /? ist etwas länger, hat viele Beispiele und wen es interessiert: hier als Download.
Beispielszenario:
Man muss allen Mitarbeitern eines Betriebes bestimmte Drucker eines Druckerservers bereitstellen. Das geht zwar auch über Gruppenrichtlinien aber oftmals hat dieser Weg entscheidende Nachteile, wo sich Scripte besser eignen.
Auf dem Server ist ein Druckserver eingerichtet, der Drucker mit allen Treibern (für das Serversystem und alle Clientsysteme (XP+7 32bit+64bit)) installiert und freigegeben.
Druckerinstallation per Netzwerk:
rundll32.exe printui.dll,PrintUIEntry /in /n „\\server\Canon iR400 EG“
/in steht für „install network printer“, /n gibt den Freigabenamen des Druckers (natürlich mit Verbindung des Servernamens) an.
Sollen mehrere Drucker eingerichtet werden empfielt es sich, das Konstrukt etwas auszubauen. Zum Beispiel kann man in dem Script abhängig von der Etage des Mitarbeiters auch gleich den richtigen Standarddrucker setzen lassen (Parameter /y).
Hier mein Scriptbeispiel:
@echo off cls echo Wo befindet sich Ihr Büro? echo -------------------------- echo 1 - Erdgeschoss echo 2 - 1. Obergeschoss echo 3 - Dachetage set /p etage=Eingabe (1/2/3): if %etage%==1 set drucker=KopiererEG if %etage%==2 set drucker=Kopierer1.OG if %etage%==3 set drucker=Kopierer2.OG echo. echo %drucker% wird als Standarddrucker eingerichtet. echo. :drucker1 echo Installiere Kopierer EG if "%etage%"=="1" goto drucker1std rundll32 printui.dll,PrintUIEntry /in /n "\\iqbserver\Kopierer EG" >> nul echo Installation abgeschlossen echo. goto drucker2 :drucker1std echo Definiere als Standarddrucker rundll32 printui.dll,PrintUIEntry /in /n "\\server\Kopierer EG" /y >> nul echo Installation erfolgreich echo. goto drucker2 :drucker2 echo Installiere Kopierer 1.OG if "%etage%"=="2" goto drucker2std rundll32 printui.dll,PrintUIEntry /in /n "\\server\Kopierer 1.OG" >> nul echo Installation erfolgreich echo. goto drucker3 :drucker2std echo Definiere als Standarddrucker rundll32 printui.dll,PrintUIEntry /in /n "\\server\Kopierer 1.OG" /y >> nul echo Installation erfolgreich echo. goto drucker3 REM :drucker3 REM ... und so weiter
Das lässt sich mit beliebig vielen Druckern durchführen, die alle nacheinander auf dem Computer des Mitarbeiters eingerichtet werden. Verbunden mit errorlevel kann man noch cleverer als ich hier reagieren, z.B. den Befehl mit erhöhten Rechten erneut probieren o.Ä. (CPAU Warnung, Nutzung auf eigene Gefahr)
Weitergabe oder Verwendung des Textes nur mit voller Quellen- und Autorangabe! Ich bitte euch, seid fair.
Sei mir nicht bös, aber deine Beispiele sind eine Katastrophe und stimmen überhaupt nicht. Errorlevels z.B. werden mit Prozent am Anfang und Ende abgefragt. Dann kommen bei deinen rundll-Aufrufen immer Errorlevel 0 zurück, egal ob man Erfolg oder Fehler hat. Über den weiteren Ablauf der Batch will ich erst gar nicht reden. Vielleicht solltest mal deine Skripte selber schreiben oder vorher wenigstens testen, bevor du was ins Netz postest…
Hallo Winni, ich gebe zu, dass dieses Script wahrlich keine Meisterleistung ist. Ich bin mir unsicher, ob ich vor 3 Jahren (so alt ist der Beitrag ja) nur unkonzentriert und schlampig beim Schreiben oder halt einfach noch unerfahren mit Batch war.
Jedenfalls müsste man an aktuelleren Posts merken können, dass mit die Batch Errorlevel mittlerweile bekannt und ein liebes Mittel geworden sind.
Ich nutze sie mittlerweile sehr aktiv zum Überwachen von Installationen und Reagieren auf Fehlercodes.
Hier ein Teil meines Java Installers (den ich in den nächsten Tagen auch veröffentlichen werde):
Ich habe mir die Errorlevel von rundll32 printui.dll nochmal angesehen und tatsächlich wird immer 0 zurückgegeben. Schade eigentlich, schlecht programmiert. Entsprechende Zeilen und Sprungmarken habe ich aus dem Script des Artikels entfernt.