Объект CimInstance
Объект CimInstance — это экземпляр управляемого ресурса, представленный в соответствии с моделью Common Information Model (CIM) и используемый в среде Windows Management Instrumentation (WMI) и её преемнике — CIM-сессии в PowerShell. Объект CimInstance является структурированным контейнером данных, который содержит свойства, методы и ассоциации, описывающие конкретный элемент системы (например, процесс, службу, диск, сетевой адаптер) в терминах стандартизированной модели управления.
История и происхождение
Технология CIM (Common Information Model) была разработана Distributed Management Task Force (DMTF) — международной организацией, занимающейся стандартизацией управления вычислительными системами. Первая версия стандарта CIM была опубликована в 1997 году. Основной целью CIM было создание универсальной, независимой от платформы модели для описания управляемых ресурсов в ИТ-инфраструктуре.
В операционных системах Microsoft Windows реализация CIM была интегрирована через Windows Management Instrumentation (WMI), представленную в Windows NT 4.0 (1998 год) и ставшую стандартным компонентом, начиная с Windows 2000. WMI предоставляла доступ к управляющим объектам через COM-интерфейсы и язык запросов WQL (WMI Query Language).
В Windows PowerShell 3.0 (2012 год) была введена новая система управления на основе CIM, которая заменила устаревшие WMI-командлеты. Вместо прямого обращения к COM-объектам WMI, PowerShell начал использовать протокол WS-Management (WSMan) для взаимодействия с CIM-сервером. В результате объекты, возвращаемые командлетами Get-CimInstance, New-CimInstance и другими, стали представлять собой экземпляры CIM-классов, а не старые объекты System.Management.ManagementObject. Это обеспечило лучшую совместимость с другими платформами и более строгую типизацию.
Структура и свойства
Объект CimInstance представляет собой экземпляр определённого CIM-класса. Каждый класс CIM описывает набор свойств (свойства, методы и ассоциации) для конкретного типа ресурса. Например, класс Win32_Process описывает процессы, а класс Win32_Service — службы Windows.
Основные компоненты CimInstance:
- CimClass: ссылка на определение класса, которому принадлежит экземпляр. Включает имя класса, пространство имён (namespace) и квалификаторы (qualifiers), описывающие метаданные.
- CimInstanceProperties: коллекция свойств экземпляра. Каждое свойство имеет имя, тип данных (например,
string,uint32,datetime,boolean) и значение. Свойства могут быть ключевыми (key) — уникально идентифицирующими экземпляр в рамках класса. - CimInstanceMethods: коллекция методов, которые можно вызвать для данного экземпляра (например, метод
Terminateдля процесса илиStartServiceдля службы). - CimInstanceAssociations: связи с другими экземплярами CIM, реализующие ассоциативные отношения (например, связь между процессом и его владельцем).
Типизация и сериализация
В отличие от старых WMI-объектов, CimInstance является строго типизированным. Он реализует интерфейсы ICimInstance и ICimClass и поддерживает сериализацию в форматы XML (CIM-XML) и JSON. Это позволяет передавать экземпляры между процессами и системами по протоколу WS-Management.
Применение в PowerShell
В среде Windows PowerShell объекты CimInstance используются для управления системой, получения информации и выполнения административных задач.
Основные командлеты для работы с CimInstance:
- Get-CimInstance: получает экземпляры CIM-классов из локальной или удалённой системы. Пример:
Get-CimInstance -ClassName Win32_Processвозвращает список всех процессов в виде объектов CimInstance. - New-CimInstance: создаёт новый экземпляр CIM-класса (например, для создания нового объекта в реестре или WMI-пространстве).
- Set-CimInstance: изменяет свойства существующего экземпляра.
- Remove-CimInstance: удаляет экземпляр.
- Invoke-CimMethod: вызывает метод экземпляра (например, остановку службы).
- Get-CimClass: получает метаданные о CIM-классе (список свойств, методов, квалификаторов).
Пример использования:
```powershell
Получение информации о службе "wuauserv" (Центр обновления Windows)
$service = Get-CimInstance -ClassName Win32_Service -Filter "Name='wuauserv'" Write-Output $service.State # Выводит состояние службы (Running, Stopped и т.д.) ```
В отличие от старого командлета Get-WmiObject, Get-CimInstance использует протокол WS-Management, что позволяет подключаться к удалённым системам через единый порт (5985 для HTTP, 5986 для HTTPS) и работать через брандмауэры.
Преимущества перед WMI-объектами
Объекты CimInstance имеют ряд преимуществ по сравнению с традиционными WMI-объектами (System.Management.ManagementObject):
- Кроссплатформенность: CimInstance может представлять ресурсы не только Windows, но и других ОС (Linux, macOS) при наличии CIM-сервера (например, OpenPegasus).
- Поддержка WS-Management: единый протокол для удалённого управления, не требующий DCOM.
- Строгая типизация: все свойства имеют определённые типы данных, что уменьшает количество ошибок при обработке.
- Сериализация: возможность преобразования в XML/JSON для обмена между системами.
- Безопасность: использование аутентификации Kerberos или NTLM через WSMan.
Ограничения и критика
Несмотря на преимущества, объекты CimInstance имеют ряд ограничений:
- Сложность: для работы с CIM требуется понимание модели классов и пространств имён, что может быть сложнее, чем использование простых COM-объектов.
- Производительность: при большом количестве запросов к CIM-серверу может наблюдаться задержка из-за накладных расходов на сериализацию и передачу по сети.
- Ограниченная поддержка в старых версиях Windows: в Windows 7 и Windows Server 2008 R2 CIM-командлеты доступны только после установки Windows Management Framework 3.0 или выше.
- Необходимость CIM-сервера: для работы с удалёнными системами на них должен быть запущен CIM-сервер (обычно это служба WinRM).
Интересные факты
- Объекты CimInstance не являются COM-объектами, в отличие от своих предшественников. Они реализованы как .NET-объекты (класс
Microsoft.Management.Infrastructure.CimInstanceв сборкеMicrosoft.Management.Infrastructure). - CIM-модель насчитывает тысячи классов, организованных в иерархию. Например, класс
CIM_LogicalDeviceявляется родительским дляWin32_DiskDrive,Win32_VideoControllerи других. - В PowerShell 7 (кросс-платформенная версия) командлеты
Get-CimInstanceиGet-CimClassработают только в Windows, так как требуют наличия CIM-сервера Microsoft. На Linux и macOS используются альтернативные механизмы (например,Get-CimInstanceчерез PowerShell Remoting).
Источники
- Distributed Management Task Force (DMTF). Common Information Model (CIM) Specification, Version 2.0. 1998.
- Microsoft Docs. CIM Classes (Windows Management Instrumentation).
- Microsoft Docs. Get-CimInstance (PowerShell).
- Microsoft Docs. Windows Management Instrumentation.
- PowerShell Team Blog. Introduction to CIM Cmdlets. 2012.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →