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.
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.
Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei gespeichert haben.
Geben Sie cscript filename.vbs in die Eingabeaufforderung ein.
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
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
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.
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
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
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.