¿Cómo puedo recuperar los tipos de datos de las propiedades al consultar WMI a través de Winrm?

¿Cómo puedo recuperar los tipos de datos de las propiedades al consultar WMI a través de Winrm?

Winrm me permite consultar WMI a través del protocolo WS-MAN en lugar de DCOM. Sin embargo, en la implementación DCOM puedo recuperar los tipos de datos de las distintas propiedades de las distintas clases que consulto. Sin embargo, si uso winrm simplemente recupero los valores. ¿Hay alguna forma de consultar los tipos de datos?

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

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

Sin embargo, como puede ver, los tipos de datos no están ahí. Conozco los tipos de datos porque se trata de un objeto Win32 estándar. El esquema está en línea y pude resolverlo estáticamente. Sin embargo, puede haber clases personalizadas. El enfoque DCOM Wmi me permitió consultar las propiedades y conocer un poco más de detalles sobre ellas, como su tipo de datos y si eran una matriz o no. ¿Puedo hacer lo mismo a través de winrm/wsman? Sé que esto se puede hacer a través de PowerShell. Estoy buscando un enfoque winrm/wsman y no powershell

Gracias

Respuesta1

Puede hacer esto de varias maneras y devolverá un objeto que los tenga todos en su tipo de datos definido. Luego puede tomar este objeto y obtener el tipo de datos de cada valor.

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

Esto le proporciona el objeto WMI y puede hacer lo que quiera con él desde allí. $WMI.psobject.Members enumera cada valor y le permite recorrer el objeto mirando cada uno.

Get-WmiObject no utiliza WS-Management para conectarse a la computadora remota y, por lo tanto, no requiere que la máquina remota tenga WS-Management configurado. Está usando DCOM aquí. Si desea utilizar WinRM, puede utilizar

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

La variable en este será Deserialized.System.Management.ManagementObject#root\cimv2\Win32_ComputerSystem pero con algunas propiedades agregadas.

información relacionada