Drucker verwalten wird leichter unter Windows 8

21. August 2013

Jeder IT-Verantwortliche und Systemadministrator wird es bestätigen: Sollten sie ein Asset in der IT benennen, das immer wieder Probleme bereitet und sicher so schnell nicht wegzudenken sein wird, so fällt die Wahl auf die Drucker. Das ist auch den Betriebssystemherstellern durchaus bewusst und so implementieren sie immer wieder Verbesserung im Drucker-Management: So hat es dann auch Microsoft mit Windows 8 gemacht. Mark Minasi zeigt hier, wie die Powershell das Installieren von Druckertreibern vereinfacht und was zu tun ist, wenn ein Cmdlet nicht so arbeitet, wie es vorgesehen war…

Bild 1. Welche Druckertreiber sind auf dem Windows-8-System schon installiert? Der Powershell-Befehl „get-printerdriver“ zeigt es an.

Wie häufig auch immer wieder die Aussagen zum „Papierlosen Büro“ auftauchen und wie innig es sich auch viele Administratoren wünschen mögen, dass die Drucker mit ihren Papierstaus, leeren Schächten und dem ewigen Hunger nach Toner und Tinte verschwinden mögen – das wird sicher so schnell nicht geschehen. So bietet dann auch Microsofts aktuelles Client-Betriebssystem Windows 8 dem Systemverwalter Unterstützung bei der Konfiguration und Verwaltung von Drucker an. Insgesamt sind es 13 Powershell Cmdlets, die diese Hilfe anbieten, und Mark Minasi stellt hier mit add-printdriver einen interessanten Vertreter aus dieser Kategorie vor.

Auf den beiden Betriebssystemen Windows 8 und Windows Server 2012 finden IT-Profis eine Reihe neuer Powershell-Namen wie printer, printerdriver und printjob. Keine Frage, die Anforderungen der Anwender an die Printer-Hardware (also an die physisch vorhandenen Drucker in der Firma) sind relativ eindeutig und sollten eigentlich leicht zu bewältigen sein: Sie wollen bedrucktes Papier von diesen Geräten erhalten und der Output, der sich auf diesem Papier wiederfindet, kommt dabei von den Print-Jobs aus dem System. Dieser Print-Jobs oder Druckeraufträge werden durch eine Softwarekomponente angelegt, die ins Spiel kommt wenn die Anwender eine Verbindung zwischen einem Drucker und ihrem PC aufbauen.

Dazu benötigen sie aber mindesten noch zwei weitere Komponenten: Ein Kabel (heute in den meisten Fällen wohl ein USB-Kabel) oder eine Netzwerkverbindung zwischen den beiden Geräten PC und Drucker sowie einen Druckertreiber. Erst mit Hilfe des Druckertreibers wird der Softwareteil des Druckers auf dem System ermöglicht und erst dadurch ist es dann überhaupt möglich, die gewünschte Information „zu Papier“ zu bringen.

Eine wichtige Aufgabe: Druckertreiber verwalten

Somit besteht der erste und einer der wichtigsten Schritte darin, die Druckertreiber zu verwalten: Die Powershell stellt dem Anwender hierzu die folgenden Cmdlets bereit:

  • get-printerdriver,
  • add-printerdriver und
  • remove-printerdriver.

Wer lokale Druckertreiber mit diesen Cmdlets hinzufügen oder entfernen möchten, braucht dazu die Berechtigungen eines lokalen Administrators. Diese Unterscheidung muss deshalb hervorgehoben werden, weil solche Rechte beispielsweise zum Hinzufügen eines Druckers nicht mehr erforderlich sind, wenn ein vorgegebener Druckertreiber bereits vom System geladen wurde. Die grundlegende Syntax des Cmdlets add-printerdriver ist sehr einfach:

add-printerdriver <Name des Druckertreibers>

So würde der folgende Aufruf den Treiber „Dell 1320c“ laden:

add-printerdriver “Dell Color Laser 1320c“

Anwender, die schon einmal mit den verschiedenen Druckertreibern ihrer Windows-Systeme gearbeitet haben, werden jetzt richtig vermuten, dass es sich beim Namen der Treiber um sogenannte „Magic Names“ handelt: Sie müssen genauso der Bezeichnung des gewünschten Treibers entsprechen, da der Aufruf ansonsten eine Fehlermeldung produzieren würde. Leider ist es an dieser Stelle auch nicht möglich, „Wildcards“ wie das *-Zeichen zu verwenden, um die richtige Bezeichnung des Treibers herauszufinden.

Um also diese „magischen Namen“ herauszufinden, stehen grundsätzlich zwei Wege zur Verfügung: Handelt es sich um Treiber, die schon vom Windows-System geladen wurden, dann hilft das Powershell-Cmdlet get-printerdriver zuverlässig, diese Treiber anzuzeigen. Der andere Weg besteht darin, die mit dem Drucker ausgelieferte .inf-Datei nach diesem Namen zu durchsuchen. Wer eine derartige Datei einmal näher untersucht, wird darin in der Regel einen Abschnitt in der folgenden Form finden:

;
; Model sections.
[DELL]
"Dell Color Laser 1320c"   = DLHSNZP1,LPTENUM\DellColor_Laser_132010D5
"Dell Color Laser 1320c"   = DLHSNZP1,USBPRINT\DellColor_Laser_132010D5

Diese Art der Aufzählung geht dann zumeist noch weiter, aber es ist deutlich zu sehen, dass nach dem Namen des Herstellers eine Zeichenkette folgt, die eben diesem gesuchten Namen des Treibers entspricht.

Bild 2. Das Kommando „pnputil“ steht seit Windows Vista zur Verfügung und kann eine Alternative sein, wenn die Powershell-Cmdlets nicht wie gewünscht arbeiten.

Verspricht leider mehr, als es halten kann…

Obwohl das Cmdlet add-printerdriver gut und praktisch im Einsatz ist, verspricht es dem Administrator leider mehr, als es in der Praxis wirklich halten kann: Die hier gezeigten Beispiel zeigen deutlich, dass er mit Hilfe des Cmdlets einem Windows-System recht einfach neue Druckertreiber hinzufügen kann – solange sie im „Driver Store“ des Betriebssystem vorhanden sind.

Natürlich hat Microsoft Windows 8 ebenso wie Windows 7 bereits mit einer großen Anzahl an Druckertreiber ausgestattet. Aber wie sollen Administratoren mit Hilfe der Powershell neue Treiber auf das System bringen? Wer in der Dokumentation nachschlägt, findet den Hinweis, dass er Druckertreiber, die sich noch nicht auf dem System befinden, mit Hilfe der Option -infpath laden kann. Das kann dann folgendermaßen aussehen:

add-printerdriver -name "Waxtronic 320" -infpath "c:\drivers\waxtronic\wi949.inf"

Es ist sogar so, dass Microsoft nach der Beschreibung die Angabe dieser Daten als Positionsparameter für das Cmdlet ermöglicht hat, was dann den folgenden Aufruf ermöglichen würde:

add-printerdriver "Waxtronic 320" "c:\drivers\waxtronic\wi949.inf"

Leider funktionierte bei den Versuchen unseres Autors und bei denen auf den Testsystemen von NT4Admins weder die eine Art des Aufrufs noch die andere. Auch eine entsprechende Suche zu diesem Problemumfeld im Internet brauchte leider keine brauchbare Hilfe zum Thema. Wir werden wohl auf die nächste Version dieses Cmdlets warten müssen, bis es die entsprechenden Features wirklich zur Verfügung stellt.

Bis dahin können Anwender aber auf das deutlich ältere Kommando pnputil ausweichen, das erstmals unter Windows Vista zur Verfügung stand. Es bietet einige sehr schöne Möglichkeiten, die Treiber zu verwalten. Dazu gehört auch die Fähigkeit, jeden vorgegebenen Treiber auf dem System zu installieren oder auch gleich eine ganze Sammlung von Treibern auf das System zu bringen, da das Kommando auch ein ganzes Verzeichnis mit Treibern verarbeiten kann. Installiert wird dabei ein neuer Treiber mit Hilfe der beiden „Schalter“ -i und -a:

pnputil -i -a "c:\drivers\waxtronic\wi949.inf"

Dieser Aufruf arbeitet nach unseren Erfahrungen in der Regel problemlos und meldet sich danach mit der Nachricht, dass es das Treiberpaket mit der Bezeichnung OEMnn.inf installiert hat. Dabei stehen die beiden Buchstaben nn für eine entsprechende Nummer.

Dieser Treiber wurde dann von dem Programm im Verzeichnis C:\windows\inf abgelegt – dort können Anwender dann auch die entsprechende inf-Datei beispielsweise mit Notepad öffnen und auch nach dem deutschen Namen des Treibers suchen. Allerdings weder durch Einsatz von pnputil noch mit Hilfe des Cmdlets set-printerdriver kann ein Administrator ein Window-8-System dazu bringen, mit einem Druckertreiber zusammenzuarbeiten, der aus Zeit vor Windows Vista stammt.

Zwei ergänzende Bemerkungen sind noch zum Abschluss wichtig: Wer das add-printerdriver Cmdlet zusammen mit einem Druckernamen verwendet, braucht auf Groß- und Kleinschreibung bei diesem Namen keine Rücksicht zu nehmen. Weiterhin sollte jeder Anwender, der dann das pnputil-Kommando einsetzt, sich darüber im Klaren sein, dass es sich hierbei nicht um ein Powershell-Kommando handelt (pnputil ist ein ausführbares Programm mit der Endung .exe), so dass die Schalter -i und -a unbedingt in diesem Reihenfolge eingegeben werden müssen. Ein Aufruf der Form pnputil -a -i <Name> veranlasst das Kommando nur dazu, die korrekte Aufrufsyntax am Bildschirm anzuzeigen.

Mark Minasi/ fms

Lesen Sie auch