Поделиться через


Получение объектов WMI с помощью Get-CimInstance

Этот пример применяется только к платформам Windows.

Инструментарий управления Windows (WMI) является ключевой технологией системного администрирования Windows, поскольку предоставляет широкий спектр сведений в унифицированном виде. Так как спектр возможностей инструментария WMI достаточно широк, командлет Get-CimInstance PowerShell для доступа к объектам WMI наиболее полезный. Мы обсудим, как использовать командлеты CIM для доступа к объектам WMI, а затем как использовать объекты WMI для выполнения конкретных действий.

Перечисление классов WMI

Первая проблема, с которой сталкиваются большинство пользователей WMI, пытается выяснить, что можно сделать с помощью WMI. Классы WMI описывают ресурсы, которыми можно управлять. Имеются сотни классов WMI, некоторые из которых содержат множество свойств.

Командлет Get-CimClass решает эту проблему, предоставляя сведения об инструментарии WMI. Список классов WMI, доступных на локальном компьютере, можно получить, введя команду:

Get-CimClass -Namespace root/CIMV2 | 
    Where-Object CimClassName -like Win32* | 
    Select-Object CimClassName
CimClassName
------------
Win32_DeviceChangeEvent
Win32_SystemConfigurationChangeEvent
Win32_VolumeChangeEvent
Win32_SystemTrace
Win32_ProcessTrace
Win32_ProcessStartTrace
Win32_ProcessStopTrace
Win32_ThreadTrace
Win32_ThreadStartTrace
Win32_ThreadStopTrace
...

Вы можете получить те же сведения с удаленного компьютера с помощью параметра ComputerName , указав имя компьютера или IP-адрес:

Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29

Список классов, возвращаемых удаленными компьютерами, может отличаться из-за конкретной операционной системы, запущенной компьютером, и определенные расширения WMI добавляются установленными приложениями.

Примечание.

При использовании командлетов CIM для подключения к удаленному компьютеру удаленный компьютер должен работать с WMI, а используемая учетная запись должна находиться в локальной группе Администратор istrators на удаленном компьютере. Удаленная система не должна устанавливать PowerShell. Это позволяет администрировать операционные системы, не работающие под управлением PowerShell, но доступны WMI.

Отображение сведений о классе WMI

Если имя класса WMI уже известно, можно немедленно получить сведения о нем. Например, одним из классов WMI, используемых для получения сведений о компьютере, является Win32_OperatingSystem.

Get-CimInstance -Class Win32_OperatingSystem
SystemDirectory     Organization BuildNumber RegisteredUser SerialNumber            Version
---------------     ------------ ----------- -------------- ------------            -------
C:\WINDOWS\system32 Microsoft    22621       USER1          00330-80000-00000-AA175 10.0.22621

Хотя мы показываем все параметры, команда может быть выражена более кратко. Параметр ComputerName не нужен при подключении к локальной системе. Мы покажем это, чтобы продемонстрировать наиболее общий случай и напомнить об этом параметре. По умолчанию параметр Namespace имеет значение root/CIMV2 и может быть опущен. В конце концов, большинство командлетов позволяет опускать имя типовых параметров. Если в командлете Get-CimInstance не указано имя для первого параметра, PowerShell считает его параметром Class. Это значит, что последнюю команду можно было ввести в таком виде:

Get-CimInstance Win32_OperatingSystem

Класс Win32_OperatingSystem имеет больше свойств, чем показано здесь. Можно воспользоваться командлетом Get-Member, чтобы показать все свойства. Свойства класса WMI автоматически доступны, как и другие свойства объекта:

Get-CimInstance -Class Win32_OperatingSystem | Get-Member -MemberType Property
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_OperatingSystem
Name                                      MemberType Definition
----                                      ---------- ----------
BootDevice                                Property   string BootDevice {get;}
BuildNumber                               Property   string BuildNumber {get;}
BuildType                                 Property   string BuildType {get;}
Caption                                   Property   string Caption {get;}
CodeSet                                   Property   string CodeSet {get;}
CountryCode                               Property   string CountryCode {get;}
CreationClassName                         Property   string CreationClassName {get;}
CSCreationClassName                       Property   string CSCreationClassName {get;}
CSDVersion                                Property   string CSDVersion {get;}
CSName                                    Property   string CSName {get;}
CurrentTimeZone                           Property   int16 CurrentTimeZone {get;}
DataExecutionPrevention_32BitApplications Property   bool DataExecutionPrevention_32BitApplications {get;}
DataExecutionPrevention_Available         Property   bool DataExecutionPrevention_Available {get;}
...

Отображение свойств, отличных от по умолчанию, с помощью командлетов Format

Если вы хотите, чтобы сведения, содержащиеся в классе Win32_OperatingSystem , который не отображается по умолчанию, его можно отобразить с помощью командлетов Format . Например, если нужно показать сведения о количестве доступной памяти, введите:

Get-CimInstance -Class Win32_OperatingSystem | Format-Table -Property TotalVirtualMemorySize, TotalVisibleMemorySize, FreePhysicalMemory, FreeVirtualMemory, FreeSpaceInPagingFiles
TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------------- ------------------ ----------------- ----------------------
              41787920               16622096            9537952          33071884               25056628

Примечание.

В именах свойств в командлете Format-Table допускаются подстановочные знаки, поэтому последний элемент конвейера может быть сокращен до Format-Table -Property Total*Memory*, Free*.

Сведения о памяти можно представить в более понятном виде, отформатировав список с помощью следующей команды:

Get-CimInstance -Class Win32_OperatingSystem | Format-List Total*Memory*, Free*
TotalVirtualMemorySize : 41787920
TotalVisibleMemorySize : 16622096
FreePhysicalMemory     : 9365296
FreeSpaceInPagingFiles : 25042952
FreeVirtualMemory      : 33013484
Name                   : Microsoft Windows 11 Pro|C:\Windows|\Device\Harddisk0\Partition2