IP-Insider PowerShell-Corner Druckerverwaltung mit Microsoft PowerShell
Die PowerShell löst die veraltete Eingabeaufforderung cmd.exe und den Windows Script Host ab und wird sich nach und nach als das Administrations-Tool in der Windows-Welt etablieren. Um IT-Verantwortlichen den Umgang mit dem neuen Werkzeug zu erleichtern, greift IP-Insider künftig unter dem Titel „PowerShell-Corner“ in loser Folge interessante Problemstellungen auf und beleuchtet Lösungsmöglichkeiten mit der PowerShell. Die Druckerverwaltung ist das zentrale Thema dieses Beitrags.
Anbieter zum Thema
Mit der PowerShell können die Eigenschaften und der Status der installierten Drucker abgefragt werden. Außerdem besteht über das Administrations-Tool die Möglichkeit, neue Drucker zu installieren und die Druckaufträge zu beeinflussen.
Allerdings gibt es für die genannten Anforderungen in der Basisausstattung der PowerShell keine Cmdlets, die direkt Zugriff auf Drucker bieten. Wie so oft heißt die Lösung auch in diesem Fall WMI (Windows Management Instrumentation). Mit Hilfe dieser Schnittstelle kann die Druckerverwaltung objektbasiert aus der PowerShell heraus vorgenommen werden. Dabei ist man zudem nicht auf den lokalen Computer beschränkt, sondern kann auch mit den auf anderen Rechnern installierten Druckern arbeiten.
Folgende drei Bereiche werden im weiteren Verlauf genauer betrachtet:
- 1. Druckerinformationen abfragen
- 2. Drucker- und Fehlerstatus auslesen
- 3. Neue Drucker installieren
- 4. Druckaufträge verwalten
Druckerinformationen abfragen
Über WMI erhält man für jeden installierten Drucker ein Objekt vom Typ Win32_Printer. Die Objekte liefert das Cmdlet Get-WMIObject:
- Get-WMIObject -Class Win32_Printer
Soll die Abfrage auf einem anderen Computer durchgeführt werden, muss der Parameter „-computer“ auf den Namen des betreffenden Rechners gesetzt werden:
- Get-WMIObject -Class Win32_Printer -Computer „London“
Die jeweils dargestellten Eigenschaften sind nur eine Vorauswahl der Standardausgabe. Die Klasse Win32_Printer hält darüber hinaus selbstverständlich deutlich mehr Informationen parat, die etwa mit einem hinten angestellten Select-Object dargestellt werden können:
- Get-WMIObject -Class Win32_Printer | Select-Object -Property *
Sind nur die Eigenschaften eines bestimmten Druckers von Interesse, kann über den Parameter „-Filter“ beim Aufruf von Get-WMIObject eine Auswahl vorgenommen werden. Soll beispielsweise das Objekt des Druckers mit dem Namen „HP Laserjet“ geliefert werden, sieht die Abfrage wie folgt aus:
- Get-WMIObject -Class Win32_Printer -Filter „Name=‘HP Laserjet‘“
Drucker- und Fehlerstatus auslesen
Zwei Eigenschaften der Klasse Win32_Printer sagen etwas über den Druckerstatus aus: PrinterStatus und DetectedErrorStatus. In beiden Eigenschaften ist jeweils eine Zahl abgelegt, die Auskunft über den Druckerstatus gibt. Auf die Eigenschaften kann wie folgt zugegriffen werden:
- $d = Get-WMIObject -Class Win32_Printer -Filter „Name=‘HP Laserjet‘“
- $d.PrinterStatus
Oder ohne Zuhilfenahme einer Variablen:
- (Get-WMIObject -Class Win32_Printer -Filter „Name=‘HP Laserjet‘“).PrinterStatus
Die Bedeutung der Werte kann der folgenden Tabelle entnommen werden:
PrinterStatus:
- 1 = Andere
- 2 = Unbekannt
- 3 = Bereit
- 4 = Druckt
- 5 = Wärmt auf
- 6 = Druckauftrag beendet
- 7 = Offline
DetectedErrorState:
- 0 = Unbekannt
- 1 = Anderer
- 2 = Kein Fehler, Drucker angehalten oder anderweitig abgeschaltet
- 3 = Wenig Papier
- 4 = Kein Papier
- 5 = Wenig Toner
- 6 = Kein Toner
- 7 = Klappe geöffnet
- 8 = Papierstau
- 9 = Offline
- 10 = Service
- 11 = Ausgabeschacht voll
Neuen Drucker installieren
Zur Installation eines im Netzwerk freigegebenen Druckers erzeugt man zunächst ein neues Win32_Printer-Objekt und legt dieses in einer Variablen ab, etwa wie folgt:
- $d = [WMIClass]“\\.\root\cimv2:Win32_Printer“
Der Punkt steht dabei für den lokalen Computer. Statt diesem kann also auch ein beliebiger Rechnernamen angegeben werden. „root\cimv2“ steht dabei für den Namensraum, der die Klasse Win32_Printer enthält.
Über das so erzeugte Objekt kann die Methode AddPrinterConnection aufgerufen und als Parameter der Pfad zum freigegebenen Drucker übergeben werden:
- $d.AddPrinterConnection(„\\london\hp“)
Daraufhin erhält man ein Ergebnisobjekt, an dessen Eigenschaft ReturnValue der Erfolg der Aktion erkannt werden kann. Steht ReturnValue auf 0, wurde der Drucker installiert.
Den Standarddrucker definiert man mit der Methode SetDefaultPrinter aus der Klasse Win32_Printer.
Druckaufträge verwalten
Lässt man sich den Aufbau der Klasse Win32_Printer über das Cmdlet Get-Member anzeigen, findet man unter anderem die Methoden Pause, Resume und CancelAllJobs.
- Get-WMIObject -Class Win32_Printer | Get-Member
Mit diesen Methoden nimmt man Einfluss auf die Druckauftragsverwaltung. Soll die Bearbeitung der Aufträge angehalten werden, könnte dies wie folgt aussehen:
- (Get-WMIObject -Class Win32_Printer -Filter „Name=‘HP Laserjet‘“).Pause()
Dabei muss auf die leeren Klammern nach der Methodenbezeichnung geachtet werden. Auch wenn kein Parameter übergeben wird, müssen diese geschrieben werden.
Alle vorhandenen Aufträge können dann folgendermaßen gelöscht werden:
- (Get-WMIObject -Class Win32_Printer -Filter „Name=‘HP Laserjet‘“).CancelAllJobs()
Die Klasse Win32_Printer kennt noch weitere Methoden, deren Einsatz aus der Bezeichnung gefolgert oder unter den unten angegebenen Adressen nachgeschlagen werden kann. Auch wenn die PowerShell über keine speziellen Cmdlets zur Druckerverwaltung verfügt, ist der Umweg über WMI nicht allzu aufwändig.
Artikelfiles und Artikellinks
Link: PowerShell-Corner: Installierte Software, Updates und Service Packs mit der PowerShell ermitteln
Link: PowerShell-Corner: Ereignisprotokolle mit der PowerShell remote abfragen
Link: PowerShell-Corner: Statistiken über Exchange-Mailboxen via Kommandozeilensprache erstellen
Link: PowerShell-Corner: SharePoint-Zugriff mit der PowerShell
Link: PowerShell-Corner: PowerShell trifft Gruppenrichtlinien
Link: PowerShell-Corner: SQL Server 2008-Administration mit der PowerShell
Link: PowerShell-Corner: Microsoft PowerShell 2.0 - Kommandozeile reloaded
Link: PowerShell-Corner: PowerShellPlus ¿ die bessere PowerShell-Arbeitsumgebung
Link: Mehr Informationen zum Tehma PowerShell
Link: PowerShell-Produktseite
(ID:2008632)