PowerShell
WMI и CIM
Поиск…
замечания
CIM против WMI
С PowerShell 3.0 есть два способа работы с классами управления в PowerShell, WMI и CIM. PowerShell 1.0 и 2.0 поддерживают только WMI-модуль, который теперь заменяется новым и улучшенным CIM-модулем. В более поздней версии PowerShell командлеты WMI будут удалены.
Сравнение CIM и WMI-модулей:
CIM-Командлет | WMI-Командлет | Что оно делает |
---|---|---|
Get-CimInstance | Get-WmiObject | Получает CIM / WMI-объекты для класса |
Invoke-CimMethod | Invoke-WmiMethod | Вызывает метод класса CIM / WMI |
Регистр-CimIndicationEvent | Регистр-WmiEvent | Регистрирует событие для класса CIM / WMI |
Remove-CimInstance | Remove-WmiObject | Удалить объект CIM / WMI |
Set-CimInstance | Set-WmiInstance | Обновления / Сохраняет объект CIM / WMI |
Get-CimAssociatedInstance | N / A | Получить связанные экземпляры (связанный объект / классы) |
Get-CimClass | Get-WmiObject -List | Список классов CIM / WMI |
New-CimInstance | N / A | Создать новый CIM-объект |
Get-CimSession | N / A | Списки CIM-сессий |
New-CimSession | N / A | Создать новую CIM-сессию |
New-CimSessionOption | N / A | Создает объект с параметрами сеанса; протокол, кодирование, отключение шифрования и т. д. (для использования с New-CimSession ) |
Remove-CimSession | N / A | Удаляет / останавливает сеанс CIM |
Дополнительные ресурсы
Должен ли я использовать CIM или WMI с Windows PowerShell? @ Эй, сценарист! Блог
Запрос объектов
CIM / WMI чаще всего используется для запроса информации или конфигурации на устройстве. Thof класс, который представляет конфигурацию, процесс, пользователя и т. Д. В PowerShell существует несколько способов доступа к этим классам и экземплярам, но наиболее распространенными способами являются использование Get-WmiObject
Get-CimInstance
(CIM) или Get-WmiObject
(WMI).
Список всех объектов для CIM-класса
Вы можете перечислить все экземпляры класса.
CIM:
> Get-CimInstance -ClassName Win32_Process
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
0 System Idle Process 0 4096 65536
4 System 1459 32768 3563520
480 Secure System 0 3731456 0
484 smss.exe 52 372736 2199029891072
....
....
WMI:
Get-WmiObject -Class Win32_Process
Использование фильтра
Вы можете применить фильтр только для получения конкретных экземпляров класса CIM / WMI. Фильтры записываются с использованием WQL
(по умолчанию) или CQL (add -QueryDialect CQL
). -Filter
использует WHERE
часть полного WQL / CQL-запроса.
CIM:
Get-CimInstance -ClassName Win32_Process -Filter "Name = 'powershell.exe'"
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
4800 powershell.exe 676 88305664 2199697199104
WMI:
Get-WmiObject -Class Win32_Process -Filter "Name = 'powershell.exe'"
...
Caption : powershell.exe
CommandLine : "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
CreationClassName : Win32_Process
CreationDate : 20160913184324.393887+120
CSCreationClassName : Win32_ComputerSystem
CSName : STACKOVERFLOW-PC
Description : powershell.exe
ExecutablePath : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
ExecutionState :
Handle : 4800
HandleCount : 673
....
Использование WQL-запроса:
Вы также можете использовать WQL / CQL-запрос для запросов и фильтров.
CIM:
Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'powershell.exe'"
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
4800 powershell.exe 673 88387584 2199696674816
Запрос объектов в другом пространстве имен:
CIM:
> Get-CimInstance -Namespace "root/SecurityCenter2" -ClassName AntiVirusProduct
displayName : Windows Defender
instanceGuid : {D68DDC3A-831F-4fae-9E44-DA132C1ACF46}
pathToSignedProductExe : %ProgramFiles%\Windows Defender\MSASCui.exe
pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe
productState : 397568
timestamp : Fri, 09 Sep 2016 21:26:41 GMT
PSComputerName :
WMI:
> Get-WmiObject -Namespace "root\SecurityCenter2" -Class AntiVirusProduct
__GENUS : 2
__CLASS : AntiVirusProduct
__SUPERCLASS :
__DYNASTY : AntiVirusProduct
__RELPATH : AntiVirusProduct.instanceGuid="{D68DDC3A-831F-4fae-9E44-DA132C1ACF46}"
__PROPERTY_COUNT : 6
__DERIVATION : {}
__SERVER : STACKOVERFLOW-PC
__NAMESPACE : ROOT\SecurityCenter2
__PATH : \\STACKOVERFLOW-PC\ROOT\SecurityCenter2:AntiVirusProduct.instanceGuid="{D68DDC3A-831F-4fae-9E44-DA132C1ACF46}"
displayName : Windows Defender
instanceGuid : {D68DDC3A-831F-4fae-9E44-DA132C1ACF46}
pathToSignedProductExe : %ProgramFiles%\Windows Defender\MSASCui.exe
pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe
productState : 397568
timestamp : Fri, 09 Sep 2016 21:26:41 GMT
PSComputerName : STACKOVERFLOW-PC
Классы и пространства имен
В CIM и WMI имеется много классов, которые разделены на несколько пространств имен. Наиболее распространенным (и по умолчанию) пространством имен в Windows является root/cimv2
. Чтобы найти righ-класс, полезно перечислить все или выполнить поиск.
Список доступных классов
Вы можете перечислить все доступные классы в пространстве имен по умолчанию ( root/cimv2
) на компьютере.
CIM:
Get-CimClass
WMI:
Get-WmiObject -List
Поиск класса
Вы можете искать определенные классы с помощью подстановочных знаков. Пример: поиск классов, содержащих слово process
.
CIM:
> Get-CimClass -ClassName "*Process*"
NameSpace: ROOT/CIMV2
CimClassName CimClassMethods CimClassProperties
------------ --------------- ------------------
Win32_ProcessTrace {} {SECURITY_DESCRIPTOR, TIME_CREATED, ParentProcessID, ProcessID...}
Win32_ProcessStartTrace {} {SECURITY_DESCRIPTOR, TIME_CREATED, ParentProcessID, ProcessID...}
Win32_ProcessStopTrace {} {SECURITY_DESCRIPTOR, TIME_CREATED, ParentProcessID, ProcessID...}
CIM_Process {} {Caption, Description, InstallDate, Name...}
Win32_Process {Create, Terminat... {Caption, Description, InstallDate, Name...}
CIM_Processor {SetPowerState, R... {Caption, Description, InstallDate, Name...}
Win32_Processor {SetPowerState, R... {Caption, Description, InstallDate, Name...}
...
WMI:
Get-WmiObject -List -Class "*Process*"
Список классов в другом пространстве имен
Корневое пространство имен просто называется root
. Вы можете перечислить классы в другом пространстве имен, используя параметр -NameSpace
.
CIM:
> Get-CimClass -Namespace "root/SecurityCenter2"
NameSpace: ROOT/SecurityCenter2
CimClassName CimClassMethods CimClassProperties
------------ --------------- ------------------
....
AntiSpywareProduct {} {displayName, instanceGuid, pathToSignedProductExe, pathToSignedReportingE...
AntiVirusProduct {} {displayName, instanceGuid, pathToSignedProductExe, pathToSignedReportingE...
FirewallProduct {} {displayName, instanceGuid, pathToSignedProductExe, pathToSignedReportingE...
WMI:
Get-WmiObject -Class "__Namespace" -Namespace "root"
Список доступных пространств имен
Чтобы найти доступные дочерние пространства имен root
(или другого пространства имен), запросите объекты в классе __NAMESPACE
для этого пространства имен.
CIM:
> Get-CimInstance -Namespace "root" -ClassName "__Namespace"
Name PSComputerName
---- --------------
subscription
DEFAULT
CIMV2
msdtc
Cli
SECURITY
HyperVCluster
SecurityCenter2
RSOP
PEH
StandardCimv2
WMI
directory
Policy
virtualization
Interop
Hardware
ServiceModel
SecurityCenter
Microsoft
aspnet
Appv
WMI:
Get-WmiObject -List -Namespace "root"