Hardware- und Software-Informationen per Fernzugriff (remote) im Windows-Netzwerk auslesen

IT-Administratoren und Verantwortliche größerer Netzwerke kennen das Problem, dass mit anwachsender Anzahl der PC-Systeme schnell der Überblick verloren geht, wenn man keine regelmäßige Inventarisierung der Hard- und Software durchführt. Dort eine defekte Komponente ausgetauscht, hier einen neuen PC-Arbeitsplatz für den neuen Mitarbeiter aufgebaut und an einer anderen Stelle neue Software und Treiber installiert. Im hektischen Alltagsleben ist man in der Regel damit beschäftigt, Wartungsarbeiten reibungslos durchzuführen, so dass die Dokumentation auf der Strecke bleibt. Die mühevolle Aufnahme der Änderungen durch den IT-Mitarbeiter selbst ist nicht nur aufwändig, sondern auch sehr ineffektiv.

PowerShell - Get-WmiObject - Logo

Microsoft hat diesen Missstand bemerkt und hat in der PowerShell ein umfangreiches Cmdlet namens Get-WmiObject implementiert, mit dem man bequem per Remote-Zugriff nahezu sämtliche Informationen eines PC-Systems auslesen kann. Von der eigentlichen Hardware (Prozessor, Festplatte, Partitionen, Physikalischer Arbeitsspeicher, BIOS, usw.) über Software (Betriebssystem-Version, installierte Treiber, usw.) bis hin zu Systeminformationen wie Windows-Prozesse und -Dienste, angemeldete Benutzer oder vorhandene Benutzerkonten: es gibt kaum eine Sache, die man mit dem Befehl Get-WmiObject nicht auslesen kann. Und das positive an der Sache ist, dass die PowerShell völlig kostenlos ist.

In diesem Artikel wird das Cmdlet Get-WmiObject etwas näher erläutert und gezeigt, wie man in einem Windows-Netzwerk effektiv die Systeminformationen eines PCs auslesen kann.

Get-WmiObject - Grundlagen

Get-WmiObject greift auf zahlreiche Klassen zu, um auf bestimmte Objekte eines Windows-Systems zugreifen zu können. So gibt es beispielsweise die Klasse win32_LogicalDisk, um mittels Get-WmiObject Informationen über die Partitionen auszulesen. Ein anderes Beispiel ist die Klasse Win32_Processor, um nützliche Daten über den verbauten Prozessor herauszufinden. Je nachdem, was man auslesen möchte, muss man die entsprechenden Klassen verwenden. Auf Microsoft MSDN gibt es eine Übersicht der WMI-Klassen:

Computer System Hardware Classes: Hardware bezogen
Operating System Classes: Betriebssystem-Informationen
Installed Applications Classes: Software
WMI Service Management Classes: Administration für WMI.
Performance Counter Classes: Leistungsdaten
Security Descriptor Helper Class: Sicherheitsbeschreibungen.

Es gibt auch folgende Möglichkeit, sich die verfügbaren Klassen wie folgt anzeigen zu lassen:

# Welche WMI-Klassen stehen überhaupt zur Verfügung
Get-WmiObject -List
Get-WmiObject -List | Where-Object {$_.name -match "Win32"}
Get-WmiObject -List | Where { $_.name -match 'User'}

# Eigenschaften einer Klasse anzeigen
Get-WmiObject win32_LogicalDisk | Get-Member

Hardware-Informationen auslesen

Folgende Beispiele sollen die Verwendung der PowerShell verdeutlichen, um Informationen über die verbaute Hardware zu erhalten:

# Prozessor (Hersteller, Modell, Taktrate, 
# Architektur 32/64Bit, Cache, Sockel, usw.)
Get-Wmiobject Win32_Processor

# Arbeitsspeicher: Größe in Bytes
Get-WmiObject Win32_ComputerSystem | Select-Object TotalPhysicalMemory

# Festplatte
Get-WmiObject Win32_DiskDrive

# Informationen über logische Laufwerke
# (Partitionen, Festplatte, optische Laufwerke, Netzlaufwerke)
Get-WmiObject win32_LogicalDisk

# Informationen über die Computerhardware
# (Hersteller, Modell, Domäne)
Get-WmiObject Win32_ComputerSystem
Get-WmiObject Win32_ComputerSystemProduct

# BIOS Informationen
Get-WmiObject Win32_bios

Windows Informationen auslesen

# Prozesse auslesen
Get-WmiObject win32_process | select-object ProcessName

# Dienste auslesen
Get-WmiObject win32_service
Get-WmiObject win32_service | Where-Object {$_.State -eq "Stopped"}
Get-WmiObject win32_service | Where-Object {$_.State -eq "Running"} | ft Name
get-wmiobject -query "select * from win32_service where name like 'alerter'"

# Informationen zum Betriebssystem auslesen
# (Version, Serial Number, Registrierter Benutzer)
Get-WmiObject Win32_OperatingSystem

# Installierte Treiber auslesen
Get-WmiObject Win32_SystemDriver

Fazit

Wir sehen hier einige Beispiele aus dem mächtigen Cmdlet Get-WmiObject, welche sich auch kombinieren lassen. Es lohnt sich auf jeden Fall einen Blick auf die weiteren Funktionen, Eigenschaften und Klassen zu werfen, um Herr seiner PC-Systeme im Netzwerk zu werden.

Voraussetzung für den Einsatz von Get-WmiObject ist die Installation der aktuellen PowerShell. Dieser kann kostenlos von der Microsoft-Webseite heruntergeladen werden: Download PowerShell.