Открыть сервис

Объект 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):

  1. Кроссплатформенность: CimInstance может представлять ресурсы не только Windows, но и других ОС (Linux, macOS) при наличии CIM-сервера (например, OpenPegasus).
  2. Поддержка WS-Management: единый протокол для удалённого управления, не требующий DCOM.
  3. Строгая типизация: все свойства имеют определённые типы данных, что уменьшает количество ошибок при обработке.
  4. Сериализация: возможность преобразования в XML/JSON для обмена между системами.
  5. Безопасность: использование аутентификации 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 →