WMI-Aufgaben für Computerhardware rufen Informationen über das Vorhandensein, den Zustand oder die Eigenschaften von Hardwarekomponenten ab. Beispielsweise können Sie bestimmen, ob es sich bei einem Computer um einen Desktop oder einen Laptop handelt. Weitere Beispiele finden Sie im TechNet ScriptCenter unter https://www.microsoft.com/technet .
Die in diesem Thema gezeigten Skriptbeispiele rufen Daten nur vom lokalen Computer ab. 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
Im folgenden Verfahren wird beschrieben, wie Ein Skript ausgeführt wird.
Kopieren Sie den Code, und speichern Sie ihn in einer Datei mit der Erweiterung .vbs, z. B.filename.vbs. Stellen Sie sicher, dass ihr Text-Editor der Datei keine .txt Erweiterung hinzufüg.
Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei gespeichert haben.
Geben Sie an der Eingabeaufforderung cscript filename.vbs ein.
Wenn Sie nicht auf ein Ereignisprotokoll zugreifen können, überprüfen Sie, ob Sie über eine Eingabeaufforderung mit erhöhten Rechten ausführen. Einige Ereignisprotokolle, z. B. das Sicherheitsereignisprotokoll, können durch Benutzerzugriffssteuerungen (User Access Controls, UAC) geschützt werden.
Hinweis
Standardmäßig zeigt cscript die Ausgabe eines Skripts im Eingabeaufforderungsfenster an. Da WMI-Skripts große Mengen von Ausgaben erzeugen können, sollten Sie die Ausgabe an eine Datei umleiten. Geben Sie cscript filename.vbs > outfile.txt an der Eingabeaufforderung ein, um die Ausgabe des filename.vbs Skripts anoutfile.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, über wie viel freien Arbeitsspeicher ein Computer verfügt?
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
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-Slot verfügt?
Verwenden Sie die Win32_PCMCIAController-Klasse, und überprüfen Sie den Wert der Count-Eigenschaft. Wenn Count gleich 0 ist, verfügt der Computer über keine PCMCIA-Slots.
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
}
... Geräte identifizieren, die nicht funktionieren (diejenigen, die mit einem Ausrufezeichensymbol in Geräte-Managergekennzeichnet sind)?
Verwenden Sie die Win32_PnPEntity-Klasse, und verwenden Sie die folgende Klausel in Ihrer WQL-Abfrage.WHERE ConfigManagerErrorCode <> 0 Beachten Sie, dass dieser Code möglicherweise keine USB-Geräte erkennt, bei denen Treiber fehlen.
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 Sie die Eigenschaften der Maus, die auf dem Computer verwendet wird?
Verwenden Sie die Win32_PointingDevice-Klasse. Dadurch werden die Eigenschaften aller zeigenden Geräte zurückgegeben, nicht nur Mausgeräte.
... bestimmen Sie die Geschwindigkeit eines auf einem Computer installierten Prozessors?
Verwenden Sie die Win32_Processor-Klasse, und überprüfen Sie den Wert der MaxClockSpeed-Eigenschaft.
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 Türm, einen Minitürm, einen Laptop usw. handelt?
Verwenden Sie die Win32_SystemEnclosure-Klasse, und überprüfen Sie den Wert der ChassisType-Eigenschaft.
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
... ermitteln, welche Art von Gerät an einen USB-Anschluss angeschlossen ist?
Verwenden Sie die Win32_USBHub-Klasse, und überprüfen Sie die Description-Eigenschaft. Diese Eigenschaft kann einen Wert wie " "Mass Storage Device" " oder " "Printing Support" (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