ADMIN

2023

05

2023-04-28T12:00:00

Lokale Netzwerke

SCHWERPUNKT

074

Netzwerk

PowerShell

WMI

Windows mit der PowerShell und WMI-Klassen konfigurieren

An der Steuerkonsole

von Thomas Joos

Veröffentlicht in Ausgabe 05/2023 - SCHWERPUNKT

Mit der Windows Management Instrumentation und der PowerShell ist es möglich, Netzwerkeinstellungen auf einem Windows-System zu ändern. Das eröffnet in Sachen zentrales Management und Automatisierung interessante Möglichkeiten. Zudem lassen sich auf diesem Weg Druckerserver verwalten, Datenträger auslesen oder auch Informationen zum Serverhersteller anzeigen und vieles mehr. Wir zeigen praktische Beispiele, die sich in nahezu allen Windows-Netzwerken umsetzen lassen.

Windows Management Instrumentation (WMI) ist eine leistungsstarke API und erlaubt das Abrufen und Ändern von Systeminformationen und Konfigurationsdaten. Die PowerShell bietet dabei eine einfache Möglichkeit, WMI-Abfragen auszuführen und Ergebnisse zu verarbeiten. Das funktioniert für Netzwerkeinstellungen genauso wie für Drucker, Laufwerke, Systemplatinen und weitere Objekte auf Windows-Computern. Server und Arbeitsstationen lassen sich dadurch über das Netzwerk anpassen oder mit Skripten konfigurieren.
Wir zeigen in diesem Beitrag verschiedene Beispiele, wie Sie die WMI dazu nutzen können, um mittels PowerShell sowie über Skripte Anpassungen vorzunehmen und Daten auszulesen. Die Möglichkeiten existieren parallel zu anderen Cmdlets, mit denen sich ebenfalls Einstellungen ändern lassen. Diese setzen aber auf andere Schnittstellen, die unter Umständen nicht auf jedem Server freigeschaltet sind. WMI steht auf allen aktuellen Windows-Versionen zur Verfügung, bis hin zu Windows 11 und Windows Server 2022, und ist in den meisten Fällen auch aktiv. Daher sollten Sie sich mit dem Thema auseinandersetzen, um sich die Vorteile der Verwendung von WMI nutzbar zu machen – es lohnt sich.
WMI-Klassen verstehen
Für die WMI-Abfragen nutzt die PowerShell verschiedene WMI-Klassen, die in Windows bereitstehen. WMI-Klassen sind ein wichtiger Bestandteil der WMI. Eine Klasse repräsentiert eine Kategorie von Verwaltungsinformationen, die im WMI-Repository gespeichert sind. Jede Klasse enthält Eigenschaften (Properties) und Methoden, die auf die jeweiligen Verwaltungsinformationen zugreifen und diese manipulieren können. Zum Beispiel gibt es Klassen für die Überwachung von Ereignissen (Win32_NTLogEvent), für die Konfiguration von Netzwerkeinstellungen (Win32_NetworkAdapterConfiguration), für die Verwaltung von Benutzerkonten (Win32_UserAccount) und für viele weitere Aspekte des Systems.
Windows Management Instrumentation (WMI) ist eine leistungsstarke API und erlaubt das Abrufen und Ändern von Systeminformationen und Konfigurationsdaten. Die PowerShell bietet dabei eine einfache Möglichkeit, WMI-Abfragen auszuführen und Ergebnisse zu verarbeiten. Das funktioniert für Netzwerkeinstellungen genauso wie für Drucker, Laufwerke, Systemplatinen und weitere Objekte auf Windows-Computern. Server und Arbeitsstationen lassen sich dadurch über das Netzwerk anpassen oder mit Skripten konfigurieren.
Wir zeigen in diesem Beitrag verschiedene Beispiele, wie Sie die WMI dazu nutzen können, um mittels PowerShell sowie über Skripte Anpassungen vorzunehmen und Daten auszulesen. Die Möglichkeiten existieren parallel zu anderen Cmdlets, mit denen sich ebenfalls Einstellungen ändern lassen. Diese setzen aber auf andere Schnittstellen, die unter Umständen nicht auf jedem Server freigeschaltet sind. WMI steht auf allen aktuellen Windows-Versionen zur Verfügung, bis hin zu Windows 11 und Windows Server 2022, und ist in den meisten Fällen auch aktiv. Daher sollten Sie sich mit dem Thema auseinandersetzen, um sich die Vorteile der Verwendung von WMI nutzbar zu machen – es lohnt sich.
WMI-Klassen verstehen
Für die WMI-Abfragen nutzt die PowerShell verschiedene WMI-Klassen, die in Windows bereitstehen. WMI-Klassen sind ein wichtiger Bestandteil der WMI. Eine Klasse repräsentiert eine Kategorie von Verwaltungsinformationen, die im WMI-Repository gespeichert sind. Jede Klasse enthält Eigenschaften (Properties) und Methoden, die auf die jeweiligen Verwaltungsinformationen zugreifen und diese manipulieren können. Zum Beispiel gibt es Klassen für die Überwachung von Ereignissen (Win32_NTLogEvent), für die Konfiguration von Netzwerkeinstellungen (Win32_NetworkAdapterConfiguration), für die Verwaltung von Benutzerkonten (Win32_UserAccount) und für viele weitere Aspekte des Systems.
Wir zeigen in diesem Beitrag zahlreiche WMI-Klassen. Mit WMI lassen sich umfassende Abfragen und Einstellungen vornehmen, ohne die Syntax oder Vorgehensweisen abändern zu müssen. Die WMI-Abfrage ruft dazu über das jeweilige Cmdlet in der PowerShell die festgelegte Klasse auf und führt Aktionen oder Abfragen aus. Dabei spielt es zunächst keine Rolle, ob es sich um einen Netzwerkadapter, einen Drucker, eine Ereignisanzeige oder ein anderes Objekt handelt, das per WMI zugreifbar ist.
WMI-Klassen sind übrigens in verschiedenen Programmiersprachen nutzbar, nicht nur in der PowerShell. Das macht die Klassen zu einem leistungsstarken und umfassenden Werkzeug für die Verwaltung von Computern in einer Windows-Umgebung. Mit der Klasse "Win32_NetworkAdapter" greifen Sie zum Beispiel auf die Netzwerkkonfiguration eines Computers zu. Dies umfasst Eigenschaften wie den Namen des Netzwerkadapters, den Hersteller, die Geschwindigkeit, die MAC-Adresse, die IP-Adresse, den DNS-Hostnamen und andere Netzwerkverbindungseigenschaften. Die Informationen, die "Win32_NetworkAdapter" bereitstellt, lassen sich wiederum verwenden, um die Netzwerkverbindungen auf einem Computer zu überwachen und zu verwalten – einschließlich der Ermittlung, welcher Adapter aktiv ist, welcher Adapter eine Verbindung zu einem bestimmten Netzwerk hat und welche Adapter über eine drahtlose Verbindung verfügen. Hier bietet WMI viele Möglichkeiten. Wir zeigen nachfolgend verschiedene Beispiele dazu.
Um Anpassungen vorzunehmen, eignet sich der Index eines Adapters am besten, um diesen eindeutig im System zu identifizieren. Möchten Sie zum Beispiel alle Adapter eines Servers und deren Indexe auslesen, verwenden Sie
Get-WmiObject Win32_NetworkAdapter | Select-Object Name, Index
Mit dem Parameter "-Computername" geht das auch über das Netzwerk:
Get-WmiObject Win32_NetworkAdapter -Computername ml30 | Select-Object Name, Index
Spezielle Bibliotheken oder APIs sind nicht nötig, um auf diese Informationen zuzugreifen.
WMI-Abfragen vorbereiten
Um mit WMI über die PowerShell Netzwerkeinstellungen zu ändern, identifizieren Sie zunächst die WMI-Klasse, die die gewünschten Einstellungen enthält. Hier gibt es wie erwähnt verschiedene Klassen, die Sie in der PowerShell aufrufen können. Die Klasse "Win32_NetworkAdapterConfiguration" enthält zum Beispiel Eigenschaften wie "IPAddress", "SubnetMask" und "DefaultIPGateway", die zur Konfiguration dienen, etwa in Skripten. Die WMI können Sie dabei in der klassischen, vorinstallierten PowerShell verwenden oder in der PowerShell 7.x, die Sie parallel zur alten PowerShell betreiben.
Funktionieren Abfragen per WMI über das Netzwerk nicht, kann es hilfreich sein, diese Funktion in Windows zunächst mit winrm quickconfig zu aktivieren. Damit schalten Sie das Windows Remote Management ein. WinRM ist auch für Remoteverbindungen der PowerShell und für das Windows Admin Center, den Server-Manager und andere Tools notwendig, die über das Netzwerk auf Daten eines Computers zugreifen oder Anpassungen vornehmen. Funktionieren Verbindungen nicht, kann der Befehl oft das Problem lösen. Ob Verbindungen mit WMI über das Netzwerk erlaubt sind, überprüfen Sie mittels winrm enumerate winrm/config/listener. Hier muss der Port 5985 geöffnet sein und Sie können mit dem Kommando auch erkennen, über welche IP-Adressen ein Computer auf WMI-Anfragen hört.
Bei Windows Server 2022 kann es passieren, dass Dienste über das Netzwerk keine Verbindung mit WMI zum Quellserver aufbauen können. In diesem Fall müssen Sie die WMI-Regeln für die Windows-Firewall erst aktivieren, um die Kommunikation zu gestatten. Dazu verwenden Sie zum Beispiel
netsh advfirewall firewall set rule group="Windows-Verwaltungsinstrumentation (WMI)" new enable=yes
Um einen Server remote im Netzwerk zu verwalten, müssen Sie diese Zugriffe ebenfalls erst erlauben:
netsh advfirewall set allprofiles settings remotemanagement enable
oder den Befehl
netsh advfirewall firewall set rule group="remoteverwaltung" new enable=yes
Um testweise den kompletten Datenverkehr auf Computern freizuschalten, verwenden Sie:
netsh advfirewall set allprofiles firewallpolicy allowin-bound,allowoutbound
In der PowerShell nutzen Sie dazu den Befehl:
Set-NetFirewallProfile -DefaultInboundAction Block -DefaultOutboundAction Allow -NotifyOnListen True
Damit Sie mit der PowerShell von einem Rechner auf den anderen zugreifen können, müssen Sie noch den Remotezugriff aktivieren. Das erledigen Sie auf dem Rechner zum Beispiel mit dem Cmdlet Enable-PSRemoting -force.
Bild 1: Mit WMI rufen Sie über das Netzwerk Daten von Servern ab, zum Beispiel Informationen zum BIOS/UEFI.
Daten über die PowerShell
WMI kann natürlich auch lokal zum Einsatz kommen, zum Beispiel für die Abfrage von Informationen, die Sie später in weiteren Skripten verwenden. Möchten Sie zum Beispiel mehr über den Hersteller und die Hauptplatine in Erfahrung bringen, nutzen Sie die WMI-Klasse "WIN32_BIOS":
Get-CimInstance -ClassName Win32_BIOS
Der Befehl unterstützt auch den Parameter "-ComputerName", sodass auch eine Abfrage über das Netzwerk erfolgen kann:
Get-CimInstance -ClassName Win32_BIOS -Computername ml30.joos.int
Das zeigt die Möglichkeiten von WMI in Zusammenhang mit der PowerShell. Sie können die Klassen netzwerkübergreifend nutzen, um Informationen abzurufen oder Anpassungen zu ändern. Zusätzlich haben Sie an dieser Stelle noch die Möglichkeit, die Daten von Rechnern über das Netzwerk abzufragen, zum Beispiel Informationen zu Datenträgern:
Get-WmiObject Win32_LogicalDisk
      -filter "DriveType=3"
      -computername ml30.joos.int
Mit der WMI lassen sich auf diesem Weg daher Daten von Netzwerkadaptern und von anderen Geräten im Computer abfragen und ändern.
Bild 2: WMI-Abfragen lassen sich mit Authentifizierungsanforderungen koppeln.
WMI-Abfragen mit Authentifizierungen
Verweigert ein Computer die Abfrage wegen fehlender Berechtigungen, ist es möglich, die Anmeldung in einer Variablen zu speichern und zur Verbindung zu nutzen:
$CimSession = New-CimSession -ComputerName <dc0>1 -Credential (Get-Credential)
 
Get-CimInstance -CimSession $CimSession -ClassName Win32_BIOS
Das ermöglicht Abfragen und Anpassungen übergreifend in Active-Directory-Domänen oder zu Arbeitsstationen und Servern, die kein Bestandteil des Active Directory sind. Was mit der Klasse "Win32_ BIOS" funktioniert, ist auch mit anderen möglich, zum Beispiel "Win32_ NetworkAdapterConfiguration". "Win32_ComputerSystem" zeigt ebenfalls Daten zu Computern und Servern an, mit dem Parameter "-Computername" auch hier wieder über das Netzwerk. So lesen Sie wichtige Informationen per WMI aus, die Sie wiederum für andere Cmdlets verwenden können. Die gleichen Informationen liefert der Befehl "Get-WmiObject Win32_BIOS".
Das nachfolgende Cmdlet ist wiederum hilfreich, um Daten zur Netzwerkkonfiguration auszulesen, die sich danach flexibel anpassen lassen, zum Beispiel:
Get-WmiObject Win32_NetworkAdapterConfiguration | FL Description,MACAddress,IPAddress,IPSubnet,DefaultIPGateway,DNSServerSearchOrder
Das Cmdlet "Get-WMIObject" nutzt verschiedene WMI-Klassen und kann Objekte auslesen sowie Informationen anzeigen. Um zum Beispiel Daten von Festplatten eines Computers zu erfassen, verwenden Sie "Win32_LogicalDisk": Get-WmiObject Win32_LogicalDisk. Sie haben die Möglichkeit, das Ergebnis zu filtern. Dazu nutzen Sie den Parameter "-filter". Dieser steht für die anderen WMI-Klassen und Cmdlets ebenfalls zur Verfügung. Mit "-filter Index=<Nummer>" sprechen Sie zum Beispiel gezielt einzelne Netzadapter an und lesen diese aus. Das geht natürlich auch hier wieder über das Netzwerk.
Für das Cmdlet "Get-WMIObject" haben Sie die Möglichkeit, über das Netzwerk Daten von physischen oder virtuellen Servern abzufragen. Dazu nutzen Sie ebenfalls den Parameter "-Computername". Eine ausführliche Liste der zur Verfügung stehenden WMI-Klassen, die sich mit dem Cmdlet nutzen lassen, erhalten Sie mit dem Befehl Get-WmiObject -List. Hier zeigt sich eine Funktion bei der Verwendung von WMI in Verbindung mit der PowerShell: Informationen eines Cmdlets lassen sich mit der Pipeline zu einem anderen Cmdlet weiterleiten. In diesem Fall liest Get-WmiObject Win32_NetworkAdapterConfiguration Daten aus und leitet das Ergebnis an das Cmdlet "Format-List" (FL). Hier lesen Sie dann die Informationen aus, die Sie brauchen.
Neben "Format-List" lässt sich die Ausgabe in eine Tabelle (Table) umleiten. Möchten Sie auf diese Weise beispielsweise die MAC-Adressen eines Computers per WMI auslesen, verwenden Sie
Get-WmiObject Win32_NetworkAdapterConfiguration | format-table MacAddress, Description -autosize
Die Konfigurationsdaten der Netzwerkadapter lesen Sie in der PowerShell mit dem folgenden Befehl per WMI aus:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration
Der Befehl zeigt alle Netzwerkadapter auf dem Computer an, ob DHCP aktiviert ist und welche Indexnummer dem Adapter zugewiesen ist. Die Indexnummer ist wie erwähnt für die Verwendung von verschiedenen Befehlen notwendig, um den Netzwerkadapter zu identifizieren. Diese WMI-Abfrage unterstützt ebenfalls den Parameter "-Computername", sodass Sie an dieser Stelle die WMI-Klasse auf Computern im Netzwerk nutzen können. Falls notwendig, arbeiten Sie an dieser Stelle mit Berechtigungen, indem Sie mit dem Parameter "-Credential (Get-Credential)" die Anmeldedaten speichern:
$CimSession = New-CimSession -ComputerName Dell -Credential (Get-Credential)
Get-CimInstance -CimSession $CimSession -ClassName Win32_NetworkAdapterConfiguration
Um mehr Informationen anzuzeigen, geben Sie die Ausgabe mit der Pipeline "|" an das Cmdlet "Select-Object" weiter. Mit dem Parameter "-ExcludeProperty" lassen sich wiederum einzelne Informationen ausblenden und mit dem Parameter
"-Filter" sprechen Sie gezielt Netzwerkadapter an, die aktuell eine IP-Adresse zugewiesen haben und mit dem Netzwerk verbunden sind:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Select-Object -ExcludeProperty IPX*,WINS*
Das lässt sich mit den gezeigten Möglichkeiten auf das Netzwerk ausdehnen:
Get-CimInstance -CimSession $CimSession -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Select-Object -ExcludeProperty IPX*,WINS*
Bild 3: In der PowerShell greifen Sie per WMI lokal auf Netzwerkadapter und parallel auf Daten von Servern im Netzwerk zu.
DHCP-Daten abfragen und Leases erneuern
Neben dem Abfragen von Informationen führen Sie mit der WMI auch Aktionen auf Computern durch. Bei der Verwendung von DHCP lesen Sie über WMI etwa Daten zu den DHCP-Leases und dem verwendeten DHCP-Server aus:
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true" | Format-Table -Property DHCP*
Diese Daten lassen sich mit den gezeigten Möglichkeiten noch über das Netzwerk auf andere Rechner ausdehnen:
Get-CimInstance -CimSession $CimSession -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true" | Format-Table -Property DHCP*
Bei Bedarf nehmen Sie mit der WMI Anpassungen an den Leases vor, zum Beispiel um diese zu erneuern. Um für alle Netzwerkadapter neue DHCP-Leases abzurufen, verwenden Sie den folgenden Befehl:
Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll
Das lässt sich wiederum mit den gezeigten Cmdlets und Parametern über das Netzwerk durchführen. Interessant ist an dieser Stelle, dass die Befehle die verwendeten DHCP-Server anzeigen. Dadurch erkennen Sie, ob es im Netzwerk unter Umständen mehrere DHCP-Server gibt, die fehlerhaft Adressen verteilen. Über diesen Weg passen Sie auch die statischen IP-Adressen einer Netzwerkverbindung an. Zunächst lassen Sie sich dazu die aktiven Adapter im System anzeigen:
Get-WMIObject Win32_NetworkAdapterConfiguration -filter IPenabled=true
Anpassungen an Netzwerkadaptern
Um Anpassung an einem bestimmten Adapter vorzunehmen, ist es sinnvoll, diesen nicht direkt anzusprechen, sondern den Adapter zuvor mit der WMI zu filtern, zum Beispiel über seine eindeutige Indexnummer im System:
Get-WMIObject Win32_NetworkAdapterConfiguration -filter Index=5
Ist der Adapter klar definiert, speichern Sie diesen in einer Variablen, etwa mittels
$adapter = Get-WMIObject Win32_NetworkAdapterConfiguration -filter Index=5
Dadurch können Sie anschließend direkt über WMI und durch Verwendung der Variable die IP-Adresse ändern, zum Beispiel mit:
$adapter.EnableStatic("10.0.11.12", "255.255.0.0")
Gateway und DNS-Server lassen sich dann noch mit den beiden folgenden Befehlen anpassen:
$adapter.SetGateways("10.0.0.1", 1)
 
$adapter.SetDNSServerSearchOrder("10.0.1.230", "1.1.1.1")
Systemeinstellungen setzen
Generell lassen sich Windows-Server auch in der Eingabeaufforderung mit dem Tool "wmic" über WMI-Abfragen verwalten. Sie können zum Beispiel die Konfiguration der Auslagerungsdatei in der Befehlszeile oder über ein Skript vornehmen. Das ist zum Beispiel notwendig, wenn die Datei größer als 2 TByte sein soll oder wenn Sie die Einstellungen eben scripten möchten. Zum Erstellen einer Auslagerungsdatei führen Sie den folgenden Befehl aus:
wmic.exe pagefileset create name="<Laufwerksbuchstabe>:\pagefile.sys"
Die aktuelle Konfiguration der Auslagerungsdatei lesen Sie mit wmic pagefile list /format:list aus. Mit dem folgenden Befehl deaktivieren Sie die Auslagerungsdatei auf einem Laufwerk:
wmic.exe pagefileset where name="<Laufwerksbuchstabe>\\pagefile.sys" delete
Haben Sie die Datei bereits gelöscht, erscheint die Meldung "Keine Instanzen verfügbar". Auf diese Weise überprüfen Sie also auch, ob auf einem Laufwerk eine Auslagerungsdatei vorhanden ist. Deren Größe passen Sie übrigens an mittels
wmic pagefileset where name="C:\\pagefile.sys" set InitialSize=2048,MaximumSize=4096
Neben der Auslagerungsdatei lassen sich noch weitere Aktionen über die WMI durchführen und Daten auslesen. Wenn Sie etwa das installierte Betriebssystem und das Datum der Installation anzeigen möchten, können Sie ebenfalls WMI und die PowerShell verwenden. So lassen sich zum Beispiel die installierten Updates auf einem Computer auslesen:
wmic qfe list
Parallel dazu erfahren Sie Daten zum Betriebssystems und dessen Versionsständen, indem Sie in der PowerShell entsprechende WMI-Klassen einsetzen. Das lässt sich in Skripten und in der PowerShell auch miteinander mischen, um verschiedene Aufgaben in einem Fenster vorzunehmen. Mit dem Befehl
Get-WmiObject Win32_OperatingSystem | Select @{Name="Installed"; Expression={$_.ConvertToDateTime($_.InstallDate)}}, Caption
zeigen Sie die entsprechenden Informationen an.
Drucker mittels WMI ansprechen
Drucker sind eine weitere unterstützte Möglichkeit, um mit der WMI Informationen auszulesen oder anzupassen. Die Abfragen für Drucker funktionieren ähnlich wie die für Netzwerkadapter, BIOS/UEFI, Laufwerke und andere Objekte, die sich mit der WMI ansprechen lassen. Dazu verwenden Sie bei Druckern wieder das Cmdlet "Get-WmiObject" mit folgenden WMI-Klassen:
- 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: Installierte DLLs
Wie mit vielen WMI-Befehlen können Sie diese Informationen von Rechnern im Netzwerk auslesen. Die installierten Drucker auf einem Druckserver lassen sich zum Beispiel in einer Variablen speichern und diese dann weiterverwenden, ausdrucken oder auslesen:
$Printer = Get-WmiObject -Class Win32_Printer -ComputerName <Druckserver>
Sie können aber noch weitergehen und die Anzeige filtern lassen. Dazu verwenden Sie den Parameter "-Filter" des Cmdlets "Get-WMIObject". Auf diesem Weg lassen Sie sich zum Beispiel nur die Druckwarteschlangen von bestimmten Druckern auf speziell festgelegten Servern anzeigen. Auch diese Informationen lassen sich in einer Variablen speichern, wie zuvor gezeigt. Direkt in der PowerShell sehen Sie die Ausgabe mittels
Get-WmiObject -Class Win32_Printer -ComputerName <Druckserver> -Filter 'name = "<Druckername>" '
Um sich den Status zu allen oder einzelnen Druckern anzeigen zu lassen, verwenden Sie das nachfolgende Kommando. Den Status erhalten Sie 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
Die Ausgabe lässt sich natürlich scripten, um das Ergebnis schöner anzuzeigen. Wenn Sie zum Beispiel alle Drucker eines Servers anzeigen möchten, verwenden Sie
$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 erweiterte Informationen, wenn zum Beispiel Fehler vorliegen. Hier erhalten Sie den Status wieder als Zahlencode
- 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
wenn Sie den folgenden Befehl eingeben:
Get-WmiObject Win32_Printer -Filter "Name='<Drucker>'").DetectedErrorState
Sie können an dieser Stelle ein Skript erstellen und die Anzeige formatieren. Neben der Möglichkeit, Drucker auszulesen, lassen sich natürlich 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()
Fazit
Die PowerShell bietet viele Cmdlets, mit denen sich Informationen im Netzwerk auslesen und Anpassungen vornehmen lassen. Eine dieser Möglichkeiten ist die Verwendung der WMI. Vor allem für Skripte für eine Automatisierung kann es sinnvoll sein, auf die PowerShell zu setzen, um mit WMI-Klassen Daten auszulesen oder Einstellungen zu ändern. Die Befehle sind konsistent aufgebaut, sodass sie in allen Umgebungen nutzbar sind. Da die WMI-Klassen darüber hinaus meistens den Parameter "-Computername" unterstützen, lassen sie sich über das Netzwerk genauso verwenden wie andere Cmdlets. Dazu kommt die Pipeline-Funktion und die Unterstützung für Variablen. WMI ist daher ein ideales Werkzeug für die Verwaltung und kann parallel mit anderen Cmdlets zum Einsatz kommen.
(dr)