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

1

O Winrm permite-me consultar o WMI através do protocolo WS-MAN, em oposição ao DCOM. No entanto, na implementação do DCOM, posso recuperar os tipos de dados das várias propriedades das várias classes que eu consultei. No entanto, se eu usar o winrm, recebo os valores novamente. Existe alguma maneira de consultar os tipos de dados?

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

Irá 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á. Eu sei os tipos de dados porque este é um objeto Win32 padrão. O esquema está on-line e eu poderia estaticamente descobrir isso. No entanto, pode haver classes personalizadas. A abordagem DCOM Wmi permitiu que eu consultasse as propriedades e descobrisse um pouco mais de detalhes sobre elas, como seu tipo de dados e se elas eram uma matriz ou não. Posso fazer o mesmo via winrm / wsman. Eu sei que isso pode ser feito via powershell. Eu estou procurando uma abordagem winrm / wsman e não powershell

Obrigado

    
por Mark 18.12.2013 / 21:19

1 resposta

0

Você pode fazer isso de várias maneiras que retornarão um objeto que tenha todos eles em seu tipo de dados definido. 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 lhe dá 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 deles.

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. Está usando o 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á um Deserialized.System.Management.ManagementObject # root \ cimv2 \ Win32_ComputerSystem, mas com algumas propriedades adicionadas.

    
por 18.12.2013 / 21:53