1. Home
  2. Microsoft
  3. Windows
  4. Windows Management Instrumentation (WMI)

Windows Management Instrumentation (WMI)

Lesedauer: 7 Minuten

Windows Management Instrumentation (WMI) ist eine leistungsfähige Schnittstelle, die es Administratoren ermöglicht, nahezu alle Aspekte eines Windows-Systems zu überwachen und zu verwalten. Eine der wichtigsten Komponenten von WMI sind die so genannten WmiObjects. Diese Objekte stellen Instanzen von WMI-Klassen dar und bieten Zugriff auf eine Vielzahl von Systeminformationen und Funktionen. Vom Abrufen von Details über die Hardware eines Computers bis hin zur Verwaltung von Prozessen und Diensten ermöglichen WmiObjects eine effiziente und automatisierte Steuerung von Windows-Systemen.

WMI dient als Schnittstelle zur Kommunikation und Abfrage von Systemkomponenten wie Hardware, Software, Netzwerkdiensten und Prozessen. Es basiert auf dem Web-Based Enterprise Management (WBEM) Standard und bietet eine standardisierte Möglichkeit, Informationen aus dem Betriebssystem abzurufen, zu verändern und zu überwachen.

Mit WMI können Skripte und Anwendungen auf wichtige Informationen zugreifen und sogar Systemkonfigurationen ändern, ohne direkt mit der Benutzeroberfläche des Betriebssystems interagieren zu müssen. So können beispielsweise Daten über Prozesse, Systemressourcen wie CPU und RAM, Netzwerkkarten, Festplatten und viele andere Aspekte eines Systems gesammelt werden. Es wird über verschiedene APIs wie die WMI Scripting API und Tools wie PowerShell und WBEMTest zugänglich gemacht.

WmiObjekte und WMI-Klassen

WmiObjekte sind Instanzen von WMI-Klassen und stellen die grundlegenden Bausteine für die Interaktion mit Windows-Systemen über WMI dar. Jede WMI-Klasse beschreibt einen bestimmten Typ von Systemobjekt, wie z.B. die Festplatte, den Arbeitsspeicher, einen Prozess oder das Betriebssystem selbst. Ein WmiObjekt repräsentiert dann eine konkrete Instanz dieser Klasse, z.B. einen bestimmten Prozess oder eine bestimmte Festplatte auf einem Computer.

Jede WMI-Klasse enthält eine Sammlung von Eigenschaften und Methoden, die mit den entsprechenden Systemobjekten verknüpft sind. Diese Eigenschaften können Werte enthalten, die Systeminformationen liefern, wie z.B. die CPU-Auslastung, die Version des Betriebssystems oder der freie Speicherplatz auf einer Festplatte. Methoden wiederum ermöglichen die Interaktion mit den Systemobjekten, z.B. das Starten oder Beenden von Prozessen.

Ein einfaches Beispiel für eine WMI-Klasse ist die Klasse Win32_OperatingSystem. Sie beinhaltet mehrere WmiObjekte, die Informationen über das Betriebssystem eines Computers enthalten, wie z.B. die Version und die BuildNumber des Systems. Dies kann hilfreich sein, wenn z.B. im Rahmen einer WMI-Filterung Gruppenrichtlinien nur auf bestimmte Versionen des Betriebssystems angewendet werden sollen.

PS C:\Windows\system32> Get-WmiObject Win32_OperatingSystem


SystemDirectory : C:\Windows\system32
Organization    :
BuildNumber     : 19045
RegisteredUser  : pronto
SerialNumber    : 00331-10000-00001-AA865
Version         : 10.0.19045

Ein ähnliches Beispiel mit einer einfachen Abfrage könnte die Klasse Win32_ComputerSystem sein. Sie zeigt rudimentäre Parameter oder Eigenschaften des Computers an:

PS C:\Windows\system32> Get-WmiObject Win32_ComputerSystem


Domain              : PROSYS.intern
Manufacturer        : VMware, Inc.
Model               : VMware Virtual Platform
Name                : 10-PC-1
PrimaryOwnerName    : pronto
TotalPhysicalMemory : 8589369344

Eine Liste aller verfügbaren WMI-Objekte kann mit dem Parameter -List in der Powershell angezeigt werden, allerdings ist die Liste ohne geeignete Filter sehr lang und unübersichtlich:

PS C:\Windows\system32> Get-WmiObject -List

Ein Beispiel für einen Filter könnte so aussehen:

PS C:\Windows\system32> Get-WmiObject -List | Where-Object { $_.Name -like "Win32*" }

Unter den folgenden Links finden Sie weitere Quellen und Beschreibungen von WMI-Klassen:

WQL (WMI Query Language)

WQL (Windows Management Instrumentation Query Language) ist eine SQL-ähnliche Abfragesprache, die speziell für die Interaktion mit WMI entwickelt wurde. Sie ermöglicht gezielte Abfragen, um Informationen über verschiedene Systemkomponenten zu erhalten. WQL ist nicht so mächtig wie SQL, da es nicht für relationale Datenbanken, sondern für die Abfrage von Systemobjekten in WMI entwickelt wurde. Es verwendet jedoch viele der gleichen Konzepte wie das Schlüsselwort SELECT, WHERE-Klauseln und logische Operatoren.

WQL-Abfragen sind besonders nützlich, wenn man nach bestimmten WMI-Klassen oder Eigenschaften innerhalb eines Systems suchen möchte, ohne alle Daten auf einmal zu laden. Stattdessen kann man mit WQL die Abfrage verfeinern, um nur die gewünschten Informationen zu erhalten.

Um nur Informationen über die Version des Betriebssystems zu erhalten, aber nicht alle Daten von der Klasse Win32_OperatingSystem zu erhalten, kann eine WQL-Abfrage verwendet werden, um gezielt die Version des Betriebssystems zu erhalten. Mit dem Parameter -Query kann eine vollständige WQL-Abfrage ausgeführt werden, bei der bestimmte Eigenschaften ausgewählt und Filter angewendet werden können:

PS C:\Windows\system32> (Get-WmiObject -Query "SELECT Version FROM Win32_OperatingSystem").Version
10.0.19045

Das PowerShell-Cmdlet Get-WmiObject verwendet intern WQL, um mit WMI zu kommunizieren und Systeminformationen zu erfassen. Bei der Verwendung von Get-WmiObject wird im Hintergrund eine WQL-Abfrage ausgeführt, um die entsprechenden WMI-Daten abzurufen. Mit zusätzlichen WQL-Anweisungen kann die Ausgabe jedoch expliziter gesteuert werden.

Randnotiz

Das gleiche Ergebnis wie zuvor kann jedoch auch ohne WQL-Anweisungen erreicht werden. Mit dem Parameter -Class wird die Klasse angegeben, aus der alle verfügbaren Eigenschaften und Objekte abgerufen werden sollen. PowerShell führt intern eine SELECT * FROM <Klassenname>-Abfrage aus, um alle Objekte der Klasse abzurufen. Es ist jedoch sinnvoll, sich mit den WQL-Anweisungen vertraut zu machen, da diese von einigen APIs oder Tools benötigt werden.

PS C:\Windows\system32> (Get-WmiObject -Class Win32_OperatingSystem).Version
10.0.19045

Sicherheitsaspekte

Die Verwendung von WMI (Windows Management Instrumentation) bietet viele Vorteile, aber es gibt auch Sicherheitsaspekte, die bei der Arbeit mit WMI berücksichtigt werden müssen. WMI bietet umfassenden Zugriff auf Systeminformationen und -konfigurationen, daher ist es wichtig sicherzustellen, dass nur autorisierte Benutzer und Prozesse Zugriff auf diese Informationen haben. Eine unsachgemäße Konfiguration oder unsachgemäße Verwendung von WMI kann zu Sicherheitslücken führen, die von Angreifern ausgenutzt werden können.

Berechtigungen und Zugriffskontrollen

WMI bietet eine Reihe von Sicherheitsmechanismen, die es ermöglichen, den Zugriff auf Systeminformationen zu steuern. Die wichtigsten Sicherheitsaspekte, die dabei berücksichtigt werden müssen, sind:

  • Benutzerberechtigungen: Nur Benutzer mit den entsprechenden Berechtigungen sollten WMI-Abfragen durchführen können. Standardmäßig müssen Benutzer in der Gruppe Administratoren sein, um vollständigen Zugriff auf WMI zu erhalten. Normale Benutzer können in der Regel nur auf einen begrenzten Satz von WMI-Daten zugreifen.
  • Verwaltung von WMI-Berechtigungen: Administratoren können mit den WMI-Berechtigungsrichtlinien (wmimgmt.msc) und über die Windows-Sicherheitsrichtlinien steuern, welcher Benutzer oder welche Gruppe Zugriff auf bestimmte WMI-Ressourcen hat. Mit der Verwaltung von WMI-Berechtigungen können Administrationsrechte speziell für verschiedene Namenräume und Klassen zugewiesen werden.
  • Zugriffssteuerung über DCOM: WMI verwendet DCOM (Distributed Component Object Model), um auf entfernte Computer zuzugreifen. DCOM muss korrekt konfiguriert werden, um sicherzustellen, dass der Fernzugriff auf WMI-Daten sicher ist. Unzureichende DCOM-Sicherheitskonfigurationen können dazu führen, dass Angreifer auf entfernte Systeme zugreifen.

Interner Reminder: Abklären ob man darauf beim AD-Tierings achten muss!

Im Alltag nützlich

Dienste überwachen

Um Informationen über laufende Dienste zu erhalten, kann die Klasse Win32_Service verwendet werden:

PS C:\Windows\system32> Get-WmiObject -Class Win32_Service | Select-Object DisplayName, Name, State, StartMode | Sort-Object StartMode

DisplayName                                              Name                                     State   StartMode
-----------                                              ----                                     -----   ---------
Windows-Verbindungs-Manager                              Wcmsvc                                   Running Auto
Lokaler Sitzungs-Manager                                 LSM                                      Running Auto
Arbeitsstationsdienst                                    LanmanWorkstation                        Running Auto
IP-Hilfsdienst                                           iphlpsvc                                 Running Auto
Server                                                   LanmanServer                             Running Auto
Manager für heruntergeladene Karten                      MapsBroker                               Stopped Auto
VMware Tools                                             VMTools                                  Running Auto
Anmeldedienst                                            Netlogon                                 Running Auto
.
.
.

Loading

Updated on 31. Dezember 2024
Was this article helpful?

Related Articles