Задачи WMI для оборудования компьютера получают сведения о присутствии, состоянии или свойствах компонентов оборудования. Например, можно определить, является ли компьютер настольным или ноутбуком. Другие примеры см. в разделе TechNet ScriptCenter в https://www.microsoft.com/technet.
Примеры скриптов, показанные в этом разделе, получают данные только с локального компьютера. Дополнительные сведения об использовании скрипта для получения данных с удаленных компьютеров см. в подключении к WMI на удаленном компьютере.
Выполнение скрипта
В следующей процедуре описывается запуск скрипта.
- Скопируйте код и сохраните его в файле с расширением VBS, например filename.vbs. Убедитесь, что текстовый редактор не добавляет в файл расширение .txt.
- Откройте окно командной строки и перейдите в каталог, в котором сохранен файл.
- В командной строке введите cscript filename.vbs.
- Если вы не можете получить доступ к журналу событий, проверьте, работает ли вы в командной строке с повышенными привилегиями. Некоторые журналы событий, такие как журнал событий безопасности, могут быть защищены элементами управления доступом пользователей (UAC).
Заметка
По умолчанию cscript отображает выходные данные скрипта в окне командной строки. Так как скрипты WMI могут создавать большие объемы выходных данных, может потребоваться перенаправить выходные данные в файл. Введите cscript filename.vbs > outfile.txt в командной строке, чтобы перенаправить выходные данные скрипта filename.vbs на outfile.txt.
В следующей таблице перечислены примеры скриптов, которые можно использовать для получения различных типов данных с локального компьютера.
... определите, сколько свободного объема памяти у компьютера? |
Используйте класс Win32_OperatingSystem и свойство FreePhysicalMemory.
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
|
$mem = Get-WmiObject -Class Win32_OperatingSystem
"System : {0}" -f $mem.csname
"Free Memory: {0}" -f $mem.FreePhysicalMemory
|
|
... определите, имеет ли компьютер DVD-диск? |
Используйте класс Win32_CDROMDrive и проверьте акроним DVD-диск в свойстве имени или DeviceID.
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
|
$drives = Get-WmiObject -Class Win32_CDROMDrives
$drives | Format-Table DeviceID, Description, Name -autosize
|
|
... определите, сколько ОЗУ устанавливается на компьютере? |
Используйте класс Win32_ComputerSystem и проверьте значение свойства TotalPhysicalMemory.
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
|
$mem = Get-WmiObject -Class Win32_ComputerSystem
|
|
... определите, имеет ли компьютер несколько процессоров? |
Используйте класс Win32_ComputerSystem и свойство NumberOfProcessors.
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
|
"System Name : {0}" -f $system.Name
"Number of Processors: {0}" -f $system.NumberOfProcessors
|
|
... определите, имеет ли компьютер слот PCMCIA? |
Используйте класс Win32_PCMCIAController и проверьте значение свойства Count. Если число равно 0, компьютер не имеет слотов PCMCIA.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PCMCIAController")
Wscript.Echo "Number of PCMCIA slots: " & colItems.Count
|
$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
}
|
|
... определите устройства, которые не работают (помеченные значком восклицательного знака в диспетчера устройств)? |
Используйте класс Win32_PnPEntity и используйте следующее предложение в запросе WQL.
WHERE ConfigManagerErrorCode <> 0 Обратите внимание, что этот код не может обнаружить usb-устройства, отсутствующие драйверы.
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
|
$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
""
}
|
|
... определите свойства мыши, используемой на компьютере? |
Используйте класс Win32_PointingDevice. Это возвращает свойства всех указывающих устройств, а не только устройств мыши.
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
|
# Получение сведений о мыши $mouse = Get-WmiObject -Class Win32_PointingDevice
<# Декодирование деталиса #>
function Deviceinterface { param ($value) switch ($value) { 0 {"Other"} 1 {"Unknown"} 3 {"Serial"} 4 {"PS/2"} 5 {"Infrared"} 6 {"HP"-HIL"} 7 {"Шина мышь"} 8 {"ADP (Apple Desktop Bus)"} 160 {"Bus Mouse DB-9"} 161 {"Bus Mouse Micro-DIN"} 162 {"USB"} } }
переключатель function Handedness { param ($value) ($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 {"Сенсорный экран"} 9 {"Мышь - оптический датчик"} } }
<# Отображение сведений #>
"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
|
|
... определите скорость процессора, установленного на компьютере? |
Используйте класс Win32_Processor и проверьте значение свойства MaxClockSpeed.
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
|
|
... определите, является ли компьютер башней, мини-башней, ноутбуком и т. д.? |
Используйте класс Win32_SystemEnclosure и проверьте значение свойства ChassisType.
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
|
$processors = Get-WmiObject -Class Win32_Processor
foreach ($proc in $processors)
{
"Processor ID: " + $proc.ProcessorID
"Maximum Clock Speed: " + $proc.MaxClockSpeed
}
|
|
... получите серийный номер и тег ресурса компьютера? |
Используйте класс Win32_SystemEnclosure, а свойства SerialNumber и SMBIOSAssetTag.
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
|
$colSMBIOS = Get-WmiObject -Class Win32_SystemEnclosure foreach ($objSMBIOS in $colSMBIOS)
{
"Part Number: " + $objSMBIOS.PartNumber
"Serial Number: " + $objSMBIOS.SerialNumber
"Asset Tag: " + $objSMBIOS.SMBIOSAssetTag
}
|
|
... определите, какой тип устройства подключается к USB-порту? |
Используйте класс Win32_USBHub и проверьте свойство описания. Это свойство может иметь такое значение, как "Массовое устройство хранилища" или "Поддержка печати".
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
|
$colItems = Get-WmiObject -Class Win32_USBHub foreach ($objItem in $colItems)
{
"Device ID: " + $objItem.DeviceID
"PNP Device ID: " + $objItem.PNPDeviceID
"Description: " + $objItem.Description
}
|
|
... определите, сколько ленточных дисков установлено на компьютере? |
Используйте класс Win32_TapeDrive, а затем используйте метод SWbemObjectSet.Count. Если число = 0, на компьютере не установлены ленточные диски.
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
|
$colItems = Get-WmiObject -Class Win32_TapeDrive foreach ($objItem in $colItems)
{
"Number of Drives: " + $colItems.Count
}
|
|
Примеры
Пример PowerShell с многопоточной системой сбора ресурсов с помощью PowerShell собирает множество полезных сведений о системе с помощью WMI и многопоточных операций с powershell.
-
задачи WMI для сценариев и приложений
-
примеры приложений WMI C++
-
TechNet ScriptCenter