WMI-uppgifter för datormaskinvara hämtar information om förekomst, tillstånd eller egenskaper för maskinvarukomponenter. Du kan till exempel avgöra om en dator är en stationär eller bärbar dator. Andra exempel finns i TechNet ScriptCenter på https://www.microsoft.com/technet.
Skriptexemplen som visas i det här avsnittet hämtar endast data från den lokala datorn. Mer information om hur du använder skriptet för att hämta data från fjärrdatorer finns i Ansluta till WMI på en fjärrdator.
Så här kör du ett skript
Följande procedur beskriver hur du kör ett skript.
Kopiera koden och spara den i en fil med tillägget .vbs, till exempel filename.vbs. Kontrollera att textredigeraren inte lägger till ett .txt filnamnstillägg.
Öppna ett kommandotolksfönster och navigera till katalogen där du sparade filen.
Skriv cscript filename.vbs i kommandotolken.
Om du inte kan komma åt en händelselogg kontrollerar du om du kör från en upphöjd kommandotolk. Vissa händelseloggar, till exempel säkerhetshändelseloggen, kan skyddas av användaråtkomstkontroller (UAC).
Not
Som standard visar cscript utdata från ett skript i kommandotolkens fönster. Eftersom WMI-skript kan generera stora mängder utdata kanske du vill omdirigera utdata till en fil. Skriv cscript filename.vbs > outfile.txt i kommandotolken för att omdirigera utdata från filename.vbs skriptet till outfile.txt.
I följande tabell visas skriptexempel som kan användas för att hämta olika typer av data från den lokala datorn.
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
... avgöra om en dator har ett PCMCIA-fack?
Använd klassen Win32_PCMCIAController och kontrollera värdet för egenskapen Count. Om Antal är 0 har datorn inga PCMCIA-platser.
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
}
... identifiera enheter som inte fungerar (de som har markerats med ett utropstecken i Device Manager)?
Använd klassen Win32_PnPEntity och använd följande sats i din WQL- fråga.
WHERE ConfigManagerErrorCode <> 0 Observera att den här koden kanske inte identifierar USB-enheter som saknar drivrutiner.
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
""
}
... fastställa egenskaperna för musen som används på datorn?
Använd klassen Win32_PointingDevice. Detta returnerar egenskaperna för alla pekande enheter, inte bara musenheter.
... fastställa hastigheten på en processor som är installerad på en dator?
Använd klassen Win32_Processor och kontrollera värdet för egenskapen 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
... avgöra om en dator är ett torn, ett minitorn, en bärbar dator och så vidare?
Använd klassen Win32_SystemEnclosure och kontrollera värdet för egenskapen 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
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
}
Exempel
PowerShell-exemplet "Multithreaded System Asset Gathering with PowerShell" samlar in en mängd användbar systeminformation via WMI och multitrådning med powershell.