WMI-taken voor computerhardware verkrijgen informatie over de aanwezigheid, status of eigenschappen van hardwareonderdelen. U kunt bijvoorbeeld bepalen of een computer een desktop of laptop is. Zie het TechNet ScriptCenter op https://www.microsoft.com/technetvoor andere voorbeelden.
De scriptvoorbeelden die in dit onderwerp worden weergegeven, verkrijgen alleen gegevens van de lokale computer. Zie Verbinding maken met WMI op een externe computer op een externe computervoor meer informatie over het gebruik van het script om gegevens op te halen van externe computers.
Een script uitvoeren
In de volgende procedure wordt beschreven hoe u een script uitvoert.
Kopieer de code en sla deze op in een bestand met de extensie .vbs, zoals bestandsnaam.vbs. Zorg ervoor dat uw teksteditor geen .txt extensie aan het bestand toevoegt.
Open een opdrachtpromptvenster en navigeer naar de map waarin u het bestand hebt opgeslagen.
Typ cscript bestandsnaam.vbs bij de opdrachtprompt.
Als u geen toegang hebt tot een gebeurtenislogboek, controleert u of u wordt uitgevoerd vanaf een opdrachtprompt met verhoogde bevoegdheid. Sommige gebeurtenislogboeken, zoals het beveiligingslogboek, kunnen worden beveiligd door UAC (User Access Controls).
Notitie
In cscript wordt standaard de uitvoer van een script weergegeven in het opdrachtpromptvenster. Omdat WMI-scripts grote hoeveelheden uitvoer kunnen produceren, kunt u de uitvoer omleiden naar een bestand. Typ cscript bestandsnaam.vbs > outfile.txt bij de opdrachtprompt om de uitvoer van de bestandsnaam.vbs script om te leiden naar outfile.txt.
De volgende tabel bevat scriptvoorbeelden die kunnen worden gebruikt voor het verkrijgen van verschillende typen gegevens van de lokale computer.
Hoe kan ik...
WMI-klassen of -methoden
... bepalen hoeveel vrij geheugen een computer heeft?
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
... bepalen of een computer een PCMCIA-sleuf heeft?
Gebruik de klasse Win32_PCMCIAController en controleer de waarde van de eigenschap Count. Als Count 0 is, heeft de computer geen PCMCIA-sleuven.
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
}
... apparaten identificeren die niet werken (apparaten die zijn gemarkeerd met een uitroeptekenpictogram in Device Manager)?
Gebruik de Win32_PnPEntity-klasse en gebruik de volgende component in uw WQL--query.
WHERE ConfigManagerErrorCode <> 0 Houd er rekening mee dat deze code mogelijk geen USB-apparaten detecteert die stuurprogramma's missen.
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
""
}
... bepaalt u de eigenschappen van de muis die op de computer wordt gebruikt?
Gebruik de klasse Win32_PointingDevice. Hiermee worden de eigenschappen van alle aanwijsapparaten geretourneerd, niet alleen muisapparaten.
... bepaalt u de snelheid van een processor die op een computer is geïnstalleerd?
Gebruik de klasse Win32_Processor en controleer de waarde van de eigenschap 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
... bepalen of een computer een toren, een minitoren, een laptop, enzovoort is?
Gebruik de klasse Win32_SystemEnclosure en controleer de waarde van de eigenschap 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
... bepalen welk type apparaat is aangesloten op een USB-poort?
Gebruik de klasse Win32_USBHub en controleer de eigenschap Description. Deze eigenschap kan een waarde hebben, zoals 'Massaopslagapparaat' of 'Ondersteuning voor afdrukken'.
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
... bepalen hoeveel tapestations op een computer zijn geïnstalleerd?
Gebruik de klasse Win32_TapeDrive klasse en gebruik vervolgens de methode SWbemObjectSet.Count. Als Count = 0, worden er geen tapestations op de computer geïnstalleerd.
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
}
Voorbeelden
Het PowerShell-voorbeeld 'Multithreaded System Asset Gathering with PowerShell' verzamelt een overvloed aan nuttige systeeminformatie via WMI en multithreading met PowerShell.