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, но с несколькими добавленными свойствами.