Como posso recuperar os tipos de dados das propriedades ao consultar o WMI via Winrm

Como posso recuperar os tipos de dados das propriedades ao consultar o WMI via Winrm

O Winrm me permite consultar o WMI por meio do protocolo WS-MAN em vez do DCOM. Porém, na implementação do DCOM posso recuperar os tipos de dados das diversas propriedades das diversas classes que consulto. No entanto, se eu usar o winrm, apenas recebo os valores. Existe alguma maneira de consultar os tipos de dados?

Por exemplo c:> winrm enum wmicimv2/* -dialect:wql -filter:"Select * FROM Win32_ComputerSystem"

Retornará algo como

    <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>
.....

No entanto, como você pode ver, os tipos de dados não estão lá. Conheço os tipos de dados porque este é um objeto Win32 padrão. O esquema está online e eu consegui descobrir isso estaticamente. No entanto, pode haver classes personalizadas. A abordagem DCOM Wmi me permitiu consultar as propriedades e descobrir um pouco mais de detalhes sobre elas, como seu tipo de dados e se eram um array ou não. Posso fazer o mesmo via winrm/wsman. Eu sei que isso pode ser feito via PowerShell. Estou procurando uma abordagem winrm/wsman e não powershell

Obrigado

Responder1

Você pode fazer isso de várias maneiras que retornarão um objeto que contém todos eles em seus tipos de dados definidos. Você pode então pegar esse objeto e obter cada tipo de dados de valores.

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

Isso fornece o objeto WMI e você pode fazer o que quiser com ele a partir daí. o $WMI.psobject.Members enumera cada valor e permite percorrer o objeto olhando para cada um.

o Get-WmiObject não está usando o WS-Management para se conectar ao computador remoto e, portanto, não exige que a máquina remota tenha o WS-Management configurado. Ele está usando DCOM aqui. Se você quiser usar o WinRM, você pode usar

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

A variável neste será Deserialized.System.Management.ManagementObject#root\cimv2\Win32_ComputerSystem mas com algumas propriedades adicionadas.

informação relacionada