SearchNetworking 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 SearchNetworking 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.
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.
Microsoft Deutschland GmbH
Firmenprofil
Kontakt
- PowerShell-Corner: Installierte Software, Updates und Service Packs mit der PowerShell ermitteln
- PowerShell-Corner: Ereignisprotokolle mit der PowerShell remote abfragen
- PowerShell-Corner: Statistiken über Exchange-Mailboxen via Kommandozeilensprache erstellen
- PowerShell-Corner: SharePoint-Zugriff mit der PowerShell
- PowerShell-Corner: PowerShell trifft Gruppenrichtlinien
- PowerShell-Corner: SQL Server 2008-Administration mit der PowerShell
- PowerShell-Corner: Microsoft PowerShell 2.0 - Kommandozeile reloaded
- PowerShell-Corner: PowerShellPlus ¿ die bessere PowerShell-Arbeitsumgebung
- Mehr Informationen zum Tehma PowerShell
-
Kommentar zu: Polycom baut an Partner-Galaxie für mehr UCC und Video-Kommunikation
posted am 12.03.2010 um 12:59 von Leserbrief SNET
-
RE(5): Kein Ruhezustand mehr bei Vista???
posted am 11.03.2010 um 14:22 von Only_Cisco
-
Laufwerksbuchstabe für 2. Platte in Windows98 ändern?
posted am 11.03.2010 um 09:51 von Vince
-
RE(2): WPA-PSK + WPA2-PSK gleichzeitig einstellen?
posted am 11.03.2010 um 09:49 von WLAN-Meister
-
ZyWall 35 - Wrong product Model
posted am 09.03.2010 um 17:58 von nicht registrierter User
Follow us!
















(nicht registrierter User)
Kommentar abschicken