Drucker mit WMI ansprechen

Druckserver in Windows Server 2016

| Autor: Thomas Joos

Pixabay.com
Pixabay.com (Pixabay.com)

Wenn Sie die Daten von Servern auslesen wollen, zum Beispiel Informationen zu Druckern, können Sie auch auf WMI-Befehle setzen.

Ausführliche Informationen zu Festplatten lassen sich zum Beispiel ebenfalls mit WMI-Befehlen abrufen. Dazu gibt es das CMDlet Get-WmiObject. Verwenden Sie die Option Win32_LogicalDisk lassen sich Informationen zu Festplatten anzeigen. Ähnlich funktionieren die Abfragen auch für Drucker. Dazu verwenden Sie Get-WmiObject mit folgenden Erweiterungen:

Win32_Printer -  Druckerwarteschlangen

Win32_PrintJob - Druckjobs

Win32_PrinterDriver - Alle Treiber, die installiert sind

Win32_TCPIPPrinterPort -  IP-Ports

Win32_PrinterConfiguration - Druckerkonfiguration

Win32_PrinterSetting - Druckerinformationen zu allen Druckern

Win32_PrinterShare - Freigaben der Drucker

Win32_PrinterDriverDll - Installiere DLLs

Wie mit vielen Befehlen über WMI, können Sie auch Informationen von Rechnern im Netzwerk auslesen. Die installierten Drucker auf einem Druckserver können Sie zum Beispiel in einer Variable speichern und diese dann weiterverwenden, ausdrucken, oder auslesen:

$Printer = Get-WmiObject -Class Win32_Printer -ComputerName [Druckserver]

Sie können aber auch noch weitergehen und die Anzeige filtern lassen. Dazu verwenden Sie die Option Filter des CMDlets get-WmiObject. Auf diesem Weg lassen Sie sich nur die Druckwarteschlangen von bestimmten Druckern auf speziell festgelegten Servern anzeigen. Auch diese Informationen können Sie in einer Variablen speichern, wie zuvor gezeigt. Sie können die Ausgabe aber auch direkt in der PowerShell anzeigen:

Get-WmiObject -Class Win32_Printer -ComputerName [Druckserver] -Filter 'name = "[Druckername]"'

Sie können sich auch den Status zu allen oder einzelnen Druckern anzeigen lassen. Sie erhalten den Status als Zahl:

(Get-WmiObject Win32_Printer -Filter "Name='<Druckername>'").PrinterStatus

Folgende Druckerstatus sind möglich:

1 = Andere

2 = Unbekannt

3 = Bereit

4 = Druckt

5 = Wärmt auf

6 = Druckauftrag beendet

7 = Offline

Sie können die Ausgabe auch skripten um das Ergebnis schöner anzuzeigen, wenn Sie zum Beispiel alle Drucker eines Servers anzeigen wollen:

$printstatus = (Get-WmiObject Win32_Printer -Filter "Name='<Drucker>'").PrinterStatus

if ($printstatus = 1) {"Druckerstatus: Unbekannt"}

if ($printstatus = 2) {"Druckerstatus: Unbekannt"}

if ($printstatus = 3) {"Druckerstatus: Bereit"}

if ($printstatus = 4) {"Druckerstatus: Druckt"}

if ($printstatus = 5) {"Druckerstatus: Wärmt auf"}

if ($printstatus = 6) {"Druckerstatus: Druckauftrag beendet"}

if ($printstatus = 7) {"Druckerstatus: Offline"}

Viele Drucker liefern auf diesem Weg auch erweiterte Informationen, wenn zum Beispiel Fehler vorliegen. Auch hier erhalten Sie den Status wieder als Zahlencode:

Get-WmiObject Win32_Printer -Filter "Name='<Drucker>'").DetectedErrorState

0 = Unbekannt

1 = Anderer

2 = Kein Fehler, Drucker nicht verfügbar

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

Auch hier können Sie wieder ein Skript erstellen und die Anzeige formatieren. Neben der Möglichkeit Drucker auszulesen, können Sie aber auch Änderungen durchführen. Sie können zum Beispiel den Namen eines Druckers in einer Variablen speichern und den Drucker in der PowerShell über WMI umbenennen:

$Printer = Get-WmiObject -class win32_Printer -ComputerName [Druckserver] -Filter 'name = "[Druckername]"'

$Printer.name = "<Neuer Name>"

$Printer.put()