WMI Windows® Management Instrumentation или WMI – это технология управления, являющаяся частью операционной системы Microsoft® Windows. Впервые она появилась еще в Windows NT® 4.0, и обеспечивала более стабильный и постоянный доступ к настройкам конфигурации как локального, так и удаленных компьютеров. Однако практическое использование WMI не всегда было простым – более ранние технологии, такие как Microsoft Visual Basic® Scripting Edition (VBScript), требовали программного подхода к использованию WMI, и далеко не все администраторы могли справиться с этой задачей. Windows PowerShell предлагает администраторам самый легкий и доступный во многих отношениях способ работы с WMI.
Комммуникации WMI Коммуникации WMI используют протокол Remote Procedure Call (RPC) Использует распределитель конечной точки распределитель конечной точки выбирает новый произвольный TCP порт для всего оставшегося взаимодействия. сложно создать статичные правила брандмауэра, разрешающие RPC трафик Windows Firewall поддерживает исключение Remote Management Это исключение позволяет динамически открывать порты для WMI RPC траффика
Структура WMI Root\Cimv2 Root\MicrosoftDNS Root\MicrosoftActiveDirectory Root\SecurityCenter Root\Cimv2 Root\MicrosoftDNS Root\MicrosoftActiveDirectory Root\SecurityCenter Win32_Account Win32_BIOS Win32_Desktop Win32_Fan Win32_Group Win32_Keyboard Win32_LogicalDisk Win32_NetworkAdapterConfiguration Win32_NTDomain Win32_Product Win32_Service Win32_Account Win32_BIOS Win32_Desktop Win32_Fan Win32_Group Win32_Keyboard Win32_LogicalDisk Win32_NetworkAdapterConfiguration Win32_NTDomain Win32_Product Win32_Service
Поиск классов внутри шелла Командлет Get-WmiObject Get-WmiObject –namespace root\cimv2 –list Get-WmiObject –namespace root\cimv2 –list –computername SEA-DC1 Get-WmiObject –namespace root\cimv2 –list –computername SEA-DC1 –credential CONTOSO\Administrator Get-WmiObject –namespace root –class__namespace | ft name Get-WmiObject –namespace root\cimv2 –list Get-WmiObject –namespace root\cimv2 –list –computername SEA-DC1 Get-WmiObject –namespace root\cimv2 –list –computername SEA-DC1 –credential CONTOSO\Administrator Get-WmiObject –namespace root –class__namespace | ft name
Использование WMI Get-WmiObject Win32_Service gwmi Win32_Service Get-WmiObject Win32_Service gwmi Win32_Service Gwmi Win32_Service | Get-Member Gwmi Win32_Service –computerName "LON-DC1", "SEA-DC2" Gwmi Win32_Service (Get-Content c:\names.txt)
Tips and Tricks Вычисления Фильтрация gwmi win32_logicaldisk | select gwmi win32_logicaldisk | select Gwmi win32_operatingsystem | select Expression={(gwmi win32_computersystem).totalphysicalmemory}} Gwmi win32_operatingsystem | select Expression={(gwmi win32_computersystem).totalphysicalmemory}} Gwmi Win32_Service | Where { $_.Name –eq 'BITS' } Gwmi Win32_Service –filter "Name = 'BITS'" Gwmi Win32_Service | Where { $_.Name –eq 'BITS' } Gwmi Win32_Service –filter "Name = 'BITS'"
ForEach-Object Так как WMI не является частью Windows PowerShell, оболочка содержит ограниченное количество командлетов для работы с WMI-объектами. В большинстве случаев основные командлеты оболочки могут манипулировать WMI-объектами так, как это требуется для выполнения ваших задач. Но иногда, однако, вы будете вынуждены отправлять WMI_объекты командлету ForEach-Object, чтобы выполнить определенные действия над каждым из них по очереди: Gwmi Win32_Process | ForEach-Object { Something }