Tags: Drucker, PowerShell, Remote-Verwaltung
Muss man häufig Drucker hinzufügen, etwa beim Management der Print-Server, dann kann es effizienter sein, dies mit PowerShell statt über die MMC-basierte Druckverwaltung tun. Einer durchgängigen Automatisierung dieses Vorgangs stehen nur der Download und das Entpacken der Treiber entgegen.
Die grafische Druckverwaltung ist ebenfalls in der Lage, Drucker auf entfernten Rechnern zu administrieren. Dazu gehört auch die Möglichkeit, neue Ports einzurichten, Treiber hinzuzufügen und Drucker anzulegen.
Anstatt sich durch die GUI des MMC-Tools zu klicken, kann man zu PowerShell greifen. Alle Cmdlets für die erforderlichen Schritte unterstützen den Parameter ComputerName, so dass man Drucker einfach remote erstellen kann.
Treiber auf Windows Server 2019 laden
Als Hürde erweist sich dabei allerdings, dass Windows Server 2019 praktisch keine Druckertreiber mehr enthält. Nutzt man diese Version des Betriebssystems für einen Print-Server, dann muss man die benötigten Treiber erst auf das System bringen.
Die Quelle für Druckertreiber wird entweder der Microsoft Update Catalog oder die Website des Hardware-Herstellers sein. Microsofts Katalog ist für die interaktive Nutzung gedacht und sperrt sich daher gegen einen Download per Script oder Kommandozeile.
Einer durchgängigen Automatisierung der Druckerinstallation steht zudem entgegen, dass PowerShell nicht über die Mittel verfügt, die .cab-Datei mit den Treibern zu entpacken und diese in den Driver Store zu übertragen.
Dafür muss man auf herkömmliche CLI-Tools zurückgreifen. Das gilt aber auch dann, wenn man die interaktive Variante über die grafische Druckerverwaltung bevorzugt.
Treiber auf Server kopieren und entpacken
Im ersten Schritt nach dem Herunterladen des Treiber-Pakets kopiert man dieses auf den entfernten Print-Server. Läuft dieser unter Server Core, dann erweist sich das Admin Center für diese Aufgabe als hilfreich.
Anschließend öffnet man eine Remote-Sitzung mit Enter-PSSession und wechselt in das Verzeichnis, in dem sich die .cab-Datei befindet. Dort entpackt man diese mit dem Expand-Utility, im folgenden Beispiel in das Unterverzeichnis driver:
expand.exe .\drivers_15de7944aba1cf37d7e561875c43a8e32e1180bd.cab -F:* .\driver\
Im nächsten Schritt entnimmt man der .inf-Datei den genauen Namen des Druckers, den man nachher für das Hinzufügen des Treibers benötigt. Dazu kann man mit Select-String nach einem Teil der Zeichenkette suchen:
Get-Content .\prnsacl1.inf | Select-String "ML-3300"
Im diesem Beispiel wollen wir die volle Bezeichnung des Samsung-Druckers der ML-3300-Serie ermitteln.
Druckertreiber in den Store übertragen
Danach überträgt man die entpackten Treiber in den lokalen Store:
pnputil.exe -a prnsacl1.inf
Erst jetzt kommt PowerShell ins Spiel. Da wir hier bereits in einer Remote-Session sind, können wir die Cmdlets gleich lokal ausführen und benötigen den Parameter ComputerName nicht.
Druckertreiber hinzufügen
Um zunächst den Druckertreiber hinzufügen, braucht man den weiter oben eruierten Namen:
Add-PrinterDriver -Name "Samsung ML-3300 Series Class Driver"
Mit
Get-PrinterDriver
kann man sich überzeugen, ob der Treiber nun im System verfügbar ist.
Anschluss für Netzwerkdrucker erzeugen
Jeder Drucker braucht bekanntlich einen Anschluss. Falls der gewünschte für den jeweiligen Drucker noch nicht existiert, kann man ihn nun erstellen. Wenn man sich vorher vergewissern möchte, ob ein bestimmter Port bereits vorhanden ist, dann zeigt
Get-PrinterPort
dies an. Für einen Netzwerkdrucker könnte man einen TCP/IP-Port so erzeugen:
Add-PrinterPort -Name "IP_192.168.0.99" -PrinterHostAddress "192.168.0.99"
Drucker hinzufügen und konfigurieren
Nun sind die Voraussetzungen gegeben, um den Drucker hinzufügen:
Add-Printer -Name "Samsung ML-3310" -DriverName "Samsung ML-3300 Series Class Driver" `
-PortName "IP_192.168.0.99"
Wie man sehen kann, braucht man hier erneut den Namen des Treibers sowie jenen des vorhin erzeugten Anschlusses. Die Bezeichnung für den Printer kann man frei vergeben. Möchte man gleich eine größere Zahl an Druckern anlegen, dann liegt es nahe, ihre Daten aus einer CSV-Datei auszulesen und an Add-Printer zu übergeben.
In der Regel wird man den Drucker im Netzwerk freigeben und im Active Directory registrieren wollen. Das hätte man schon über die entsprechenden Parameter von Add-Printer tun können, lässt sich aber leicht mit Set-Printer nachholen:
Set-Printer -Name "Samsung ML-3310" -Location "Redaktion" -Published $true -Shared $true
Dieser Aufruf gibt den Drucker unter seinem Namen frei, weil der Parameter ShareName nicht spezifiziert wurde. Published trägt den Printer in das Active Directory ein. Zusätzlich legt Location den Ort fest, an dem der Drucker steht, typischerweise ist das der Name einer Abteilung, eine Raumnummer oder dergleichen.
Mit Comment könnte man noch ergänzende Informationen hinterlegen. Außerdem lässt sich damit auch die Zeitspanne (StartTime und UntilTime) definieren, während der ein Drucker verfügbar ist.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- ThinPrint 13 unterstützt Microsofts V4-Druckertreiber und MMC
- PowerShell 7.3: JEA über SSH, Cmdlet für Setup, erweiterte ARM-Unterstützung
- Second-Hop-Problem: CredSSP für PowerShell-Remoting konfigurieren
- PowerShell für Exchange auf Workstation installieren
- Drucker mit PowerShell und CSV-Datei anlegen
Weitere Links