Получение объектов 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
PowerShell