Winrm позволяет мне запрашивать WMI через протокол WS-MAN, а не через DCOM. Однако в реализации DCOM я могу извлекать типы данных различных свойств различных запрашиваемых классов. Однако, если я использую winrm, я просто возвращаю значения. Есть ли способ запросить типы данных?
Например, c:> winrm enum wmicimv2 / * -dialect: wql -filter: "Выбрать * FROM 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
Спасибо
Вы можете сделать это несколькими способами, которые вернут объект, у которого все они есть в их определенном типе данных. Затем вы можете взять этот объект и получить каждый тип данных значений.
$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, но с несколькими добавленными свойствами.