WMI-Aufgaben: Computerhardware

WMI-Aufgaben für Computerhardware rufen Informationen über das Vorhandensein, den Zustand oder die Eigenschaften von Hardwarekomponenten ab. Sie können beispielsweise bestimmen, ob es sich bei einem Computer um einen Desktopcomputer oder einen Laptop handelt. Weitere Beispiele finden Sie im TechNet ScriptCenter unter https://www.microsoft.com/technet.

In den in diesem Artikel enthaltenen Skriptbeispielen werden nur Daten vom lokalen Computer abgerufen. Weitere Informationen zur Verwendung des Skripts zum Abrufen von Daten von Remotecomputern finden Sie unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer.

So führen Sie ein Skript aus

Nachstehend wird die Skriptausführung näher beschrieben.

  1. Kopieren Sie den Code, und speichern Sie ihn in einer Datei mit VBS-Erweiterung, z. B. filename.vbs. Stellen Sie sicher, dass der Text-Editor der Datei keine TXT-Erweiterung hinzufügt.
  2. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei gespeichert haben.
  3. Geben Sie cscript filename.vbs in die Eingabeaufforderung ein.
  4. Wenn Sie nicht auf ein Ereignisprotokoll zugreifen können, überprüfen Sie, ob Sie eine Eingabeaufforderung mit erhöhten Rechten verwenden. Einige Ereignisprotokolle, z. B. das Sicherheitsereignisprotokoll, können durch die Benutzerkontensteuerung (User Account Control, UAC) geschützt sein.

Hinweis

Standardmäßig zeigt cscript die Ausgabe eines Skripts im Eingabeaufforderungsfenster an. Da WMI-Skripts sehr viele Ausgabedaten erzeugen können, sollten Sie die Ausgabe in eine Datei umleiten. Geben Sie cscript filename.vbs > outfile.txt in die Eingabeaufforderung ein, um die Ausgabe des Skripts filename.vbs an outfile.txt umzuleiten.

In der folgenden Tabelle sind Skriptbeispiele aufgeführt, die zum Abrufen verschiedener Datentypen vom lokalen Computer verwendet werden können.

Vorgehensweisen WMI-Klassen oder -Methoden
Ermitteln des freien Speichers für einen Computer Verwenden Sie die Klasse Win32_OperatingSystem und die Eigenschaft FreePhysicalMemory.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colSettings 
    Wscript.Echo "Available Physical Memory: " & objOperatingSystem.FreePhysicalMemory
Next
PowerShell
$mem = Get-WmiObject -Class Win32_OperatingSystem
"System : {0}" -f $mem.csname
"Free Memory: {0}" -f $mem.FreePhysicalMemory
Ermitteln, ob ein Computer über ein DVD-Laufwerk verfügt

Verwenden Sie die Klasse Win32_CDROMDrive, und überprüfen Sie, ob das Akronym „DVD“ in der Eigenschaft Name oder DeviceID enthalten ist.

VB
strComputer = "."
Set objWMIService = GetObject( "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_CDROMDrive")
For Each objItem in colItems
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Name: " & objItem.Name 
Next
PowerShell
$drives = Get-WmiObject -Class Win32_CDROMDrives
$drives | Format-Table DeviceID, Description, Name -autosize
Ermitteln, wie viel RAM auf einem Computer installiert ist

Verwenden Sie die Klasse Win32_ComputerSystem, und überprüfen Sie den Wert der Eigenschaft TotalPhysicalMemory.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings 
    Wscript.Echo "System Name: " & objComputer.Name
    Wscript.Echo "Total Physical Memory: " & objComputer.TotalPhysicalMemory
Next
PowerShell
$mem = Get-WmiObject -Class Win32_ComputerSystem
Ermitteln, ob ein Computer über mehrere Prozessoren verfügt

Verwenden Sie die Klasse Win32_ComputerSystem und die Eigenschaft NumberOfProcessors.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings 
    Wscript.Echo "System Name: " & objComputer.Name
    Wscript.Echo "Number of Processors: " & objComputer.NumberOfProcessors
Next
PowerShell
"System Name : {0}" -f $system.Name
"Number of Processors: {0}" -f $system.NumberOfProcessors
Ermitteln, ob ein Computer über einen PCMCIA-Steckplatz verfügt

Verwenden Sie die Klasse Win32_PCMCIAController, und überprüfen Sie den Wert der Eigenschaft Count. Wenn Count den Wert 0 hat, verfügt der Computer über keine PCMCIA-Steckplätze.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PCMCIAController")
Wscript.Echo "Number of PCMCIA slots: " & colItems.Count

PowerShell
              
              $Pcmcia = Get-WmiObject -Class Win32_PCMCIAController 

if (!$pcmcia.count) { "Number of PCMCIA Slots: {0}" -f 1 }else { "Number of PCMCIA Slots: {0}" -f $pcmcia.count }

Identifizieren von nicht funktionierenden Geräten (Geräte, die im Geräte-Manager mit einem Ausrufezeichen gekennzeichnet sind)

Verwenden Sie die Klasse Win32_PnPEntity und die folgende Klausel in Ihrer WQL-Abfrage. WHERE ConfigManagerErrorCode <> 0 Beachten Sie, dass dieser Code möglicherweise keine USB-Geräte erkennt, für die keine Treiber vorhanden sind.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0")
For Each objItem in colItems
    Wscript.Echo "Class GUID: " & objItem.ClassGuid
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Manufacturer: " & objItem.Manufacturer
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
    Wscript.Echo "Service: " & objItem.Service
Next
PowerShell
$baddevices = Get-WmiObject Win32_PNPEntity | where {$_.ConfigManagerErrorcode -ne 0}
" Total Bad devices: {0}" -f $baddevices.count
foreach ($device in $baddevices) {
    "Name : {0}" -f $device.name
    "Class Guid : {0}" -f $device.Classguid
    "Description : {0}" -f $device.Description
    "Device ID : {0}" -f $device.deviceid
    "Manufacturer : {0}" -f $device.manufactuer
    "PNP Devcice Id : {0}" -f $device.PNPDeviceID
    "Service Name : {0}" -f $device.service
    ""
}
Bestimmen der Eigenschaften der für den Computer verwendeten Maus

Verwenden Sie die Klasse Win32_PointingDevice. Diese gibt die Eigenschaften aller Zeigegeräte zurück, nicht nur die der Maus.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PointingDevice")
For Each objItem in colItems
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Device Interface: " & objItem.DeviceInterface
    Wscript.Echo "Double Speed Threshold: " & objItem.DoubleSpeedThreshold
    Wscript.Echo "Handedness: " & objItem.Handedness
    Wscript.Echo "Hardware Type: " & objItem.HardwareType
    Wscript.Echo "INF File Name: " & objItem.InfFileName
    Wscript.Echo "INF Section: " & objItem.InfSection
    Wscript.Echo "Manufacturer: " & objItem.Manufacturer
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "Number Of Buttons: " & objItem.NumberOfButtons
    Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
    Wscript.Echo "Pointing Type: " & objItem.PointingType
    Wscript.Echo "Quad Speed Threshold: " & objItem.QuadSpeedThreshold
    Wscript.Echo "Resolution: " & objItem.Resolution
    Wscript.Echo "Sample Rate: " & objItem.SampleRate
    Wscript.Echo "Synch: " & objItem.Synch
Next

PowerShell
              
              # Get Mouse information 

$mouse = Get-WmiObject -Class Win32_PointingDevice

<# Decode details #>

function Deviceinterface { param ($value) switch ($value) { 0 {"Other"} 1 {"Unknown"} 3 {"Serial"} 4 {"PS/2"} 5 {"Infrared"} 6 {"HP-HIL"} 7 {"Bus Mouse"} 8 {"ADP (Apple Desktop Bus)"} 160 {"Bus Mouse DB-9"} 161 {"Bus Mouse Micro-DIN"} 162 {"USB"} } }

function Handedness { param ($value) switch ($value) { 0 {"Unknown"} 1 {"Not Applicable"} 2 {"Right-Handed Operation"} 3 {"Left-Handed Operation"} } }

function Pointingtype {

param ($value) switch ($value) { 1 {"Other"} 2 {"Unknown"} 3 {"Mouse"} 4 {"Track Ball"} 5 {"Track Point"} 6 {"Glide Point"} 7 {"Touch Pad"} 8 {"Touch Screen"} 9 {"Mouse - Optical Sensor"} } }

<# Display details #>

"Mouse Information on System: {0}" -f $mouse.systemname "Description : {0}" -f $mouse.Description "Device ID : {0}" -f $mouse.DeviceID "Device Interface : {0}" -f (Deviceinterface($mouse.DeviceInterface)) "Double Speed Threshold : {0}" -f $mouse.DoubleSpeedThreshold "Handedness : {0}" -f (Handedness($mouse.handedness)) "Hardware Type : {0}" -f $mouse.Hardwaretype "INF FIle Name : {0}" -f $mouse.InfFileName "Inf Section : {0}" -f $mouse.InfSection "Manufacturer : {0}" -f $mouse.Manufacturer "Name : {0}" -f $mouse.Name "Number of buttons : {0}" -f $mouse.NumberOfButtons "PNP Device ID : {0}" -f $mouse.PNPDeviceID "Pointing Type : {0}" -f (Pointingtype ($mouse.PointingType)) "Quad Speed Threshold : {0}" -f $mouse.QuadSpeedThreshold "Resolution : {0}" -f $mouse.Resolution "Sample Rate : {0}" -f $mouse.SampleRate "Synch : {0}" -f $mouse.Synch

Bestimmen der Geschwindigkeit eines im Computer installierten Prozessors

Verwenden Sie die Klasse Win32_Processor, und überprüfen Sie den Wert der Eigenschaft MaxClockSpeed.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objItem in colItems
    Wscript.Echo "Processor Id: " & objItem.ProcessorId
    Wscript.Echo "Maximum Clock Speed: " & objItem.MaxClockSpeed
Next
Bestimmen, ob es sich bei einem Computer um einen Tower, einen Mini-Tower, einen Laptop usw. handelt

Verwenden Sie die Klasse Win32_SystemEnclosure, und überprüfen Sie den Wert der Eigenschaft ChassisType.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colChassis = objWMIService.ExecQuery("Select * from Win32_SystemEnclosure")
For Each objChassis in colChassis
    For Each objItem in objChassis.ChassisTypes
        Wscript.Echo "Chassis Type: " & objItem
    Next
Next
PowerShell
$processors = Get-WmiObject -Class Win32_Processor
foreach ($proc in $processors)
{
    "Processor ID: " + $proc.ProcessorID
    "Maximum Clock Speed: " + $proc.MaxClockSpeed
}
Abrufen der Seriennummer und des Ressourcentags eines Computers

Verwenden Sie die Klasse Win32_SystemEnclosure sowie die Eigenschaften SerialNumber und SMBIOSAssetTag.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSMBIOS = objWMIService.ExecQuery("Select * from Win32_SystemEnclosure")
For Each objSMBIOS in colSMBIOS
    Wscript.Echo "Part Number: " & objSMBIOS.PartNumber
    Wscript.Echo "Serial Number: " & objSMBIOS.SerialNumber
    Wscript.Echo "Asset Tag: " & objSMBIOS.SMBIOSAssetTag
Next

PowerShell
              
              $colSMBIOS = Get-WmiObject -Class Win32_SystemEnclosure 

foreach ($objSMBIOS in $colSMBIOS) { "Part Number: " + $objSMBIOS.PartNumber "Serial Number: " + $objSMBIOS.SerialNumber "Asset Tag: " + $objSMBIOS.SMBIOSAssetTag }

Bestimmen, welche Art von Gerät an einen USB-Anschluss angeschlossen ist

Verwenden Sie die Klasse Win32_USBHub, und überprüfen Sie die Eigenschaft Description. Diese Eigenschaft kann einen Wert wie „Massenspeichergerät“ oder „Druckunterstützung“ aufweisen.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_USBHub")
For Each objItem in colItems
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo
Next

PowerShell
              
              $colItems = Get-WmiObject -Class Win32_USBHub 

foreach ($objItem in $colItems) { "Device ID: " + $objItem.DeviceID "PNP Device ID: " + $objItem.PNPDeviceID "Description: " + $objItem.Description }

Bestimmen, wie viele Bandlaufwerke auf einem Computer installiert sind

Verwenden Sie die Klasse Win32_TapeDrive und anschließend die Methode SWbemObjectSet.Count. Wenn der Wert für „Count“ 0 lautet, sind keine Bandlaufwerke auf dem Computer installiert.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_TapeDrive")
Wscript.Echo "Number of tape drives: " & colItems.Count

PowerShell
              
              $colItems = Get-WmiObject -Class Win32_TapeDrive 

foreach ($objItem in $colItems) { "Number of Drives: " + $colItems.Count }

Beispiele

Der folgende Beispielcode aus dem TechNet-Katalog beschreibt, wie Sie den freien Speicherplatz aller Laufwerke für mehrere Computer auflisten können.

Das PowerShell-Beispiel Get-ComputerInfo: Abfragen von Computerinformationen zu lokalen Computern/Remotecomputern (WMI) im TechNet-Katalog verwendet verschiedene Aufrufe an Hard- und Software, um Informationen zu einem lokalen System oder einem Remotesystem anzuzeigen.

Das PowerShell-Beispiel Multithreading-Ressourcen: Sammeln von Informationen mit PowerShell im TechNet-Katalog erfasst eine Vielzahl nützlicher Systeminformationen über WMI und Multithreading mit PowerShell.

WMI-Aufgaben für Skripts und Anwendungen

WMI-C++-Anwendungsbeispiele

TechNet ScriptCenter