Как получить типы данных свойств при запросе WMI через Winrm

Как получить типы данных свойств при запросе WMI через Winrm

Winrm позволяет мне запрашивать WMI через протокол WS-MAN, а не DCOM. Однако в реализации DCOM я могу извлекать типы данных различных свойств различных классов, которые я запрашиваю. Однако, если я использую winrm, я просто получаю значения. Есть ли способ запросить типы данных?

Например c:> winrm enum wmicimv2/* -dialect:wql -filter:"Выбрать * ИЗ Win32_ComputerSystem"

Вернет что-то вроде

    <wsman:Results xmlns:wsman="http://schemas.dmtf.org/wbem/wsman/1/wsman/results">
    <p:Win32_ComputerSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_ComputerSystem" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xsi:type="p:Win32_ComputerSystem_Type" xml:lang="en-US">

<p:AdminPasswordStatus>3</p:AdminPasswordStatus>
<p:AutomaticManagedPagefile>true</p:AutomaticManagedPagefile>
<p:AutomaticResetBootOption>true</p:AutomaticResetBootOption>
<p:AutomaticResetCapability>true</p:AutomaticResetCapability>
<p:BootOptionOnLimit xsi:nil="true"/><p:BootOptionOnWatchDog xsi:nil="true"/>
<p:BootROMSupported>true</p:BootROMSupported>
<p:BootupState>Normal boot</p:BootupState>
.....

Однако, как вы видите, типы данных отсутствуют. Я знаю типы данных, потому что это стандартный объект Win32. Схема находится в сети, и я мог статически ее вычислить. Однако могут быть пользовательские классы. Подход DCOM Wmi позволил мне запросить свойства и узнать немного больше подробностей о них, например, их тип данных и являются ли они массивом или нет. Могу ли я сделать то же самое через winrm/wsman? Я знаю, что это можно сделать через powershell. Я ищу подход winrm/wsman, а не powershell

Спасибо

решение1

Вы можете сделать это несколькими способами, которые вернут объект, который имеет их все в их определенном типе данных. Затем вы можете взять этот объект и получить каждый тип данных значений.

$WMI = get-wmiobject -class Win32_ComputerSystem -ComputerName <RemoteComputer>
$WMI.PSObject.Members | where membertype -match "Property"

Это дает вам объект WMI, и вы можете делать с ним все, что захотите. $WMI.psobject.Members перечисляет каждое значение и позволяет вам проходить по объекту, просматривая каждое из них.

Get-WmiObject не использует WS-Management для подключения к удаленному компьютеру и, следовательно, не требует, чтобы удаленная машина имела настроенный WS-Management. Здесь используется DCOM. Если вы хотите использовать WinRM, вы можете использовать

$Results = Invoke-Command -scriptblock { get-wmiobject -class Win32_ComputerSystem } -computerName <ComputerName>

Переменная в этом случае будет Deserialized.System.Management.ManagementObject#root\cimv2\Win32_ComputerSystem, но с несколькими добавленными свойствами.

Связанный контент