![]() | |
|
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
Ü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‘“
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:
1 = Andere
2 = Unbekannt
3 = Bereit
4 = Druckt
5 = Wärmt auf
6 = Druckauftrag beendet
7 = Offline
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
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.
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.
Microsoft Deutschland GmbH
Firmenprofil
Kontakt
posted am 01.09.2010 um 11:10 von Joachim Bernert
posted am 31.08.2010 um 11:03 von nicht registrierter User
posted am 30.08.2010 um 22:15 von nicht registrierter User
posted am 30.08.2010 um 17:01 von nicht registrierter User
posted am 26.08.2010 um 11:40 von Leserbrief SNET
posted am 15.03.2010 um 11:04 von Unregistriert
Mitdiskutieren