Wie kann ich die Datentypen von Eigenschaften abrufen, wenn ich WMI über Winrm abfrage?

Wie kann ich die Datentypen von Eigenschaften abrufen, wenn ich WMI über Winrm abfrage?

Mit Winrm kann ich WMI über das WS-MAN-Protokoll abfragen, im Gegensatz zu DCOM. In der DCOM-Implementierung kann ich jedoch die Datentypen der verschiedenen Eigenschaften der verschiedenen Klassen abrufen, die ich abfrage. Wenn ich jedoch Winrm verwende, erhalte ich nur die Werte zurück. Gibt es eine Möglichkeit, die Datentypen abzufragen?

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

Wird etwas zurückgeben wie

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

Wie Sie jedoch sehen, sind die Datentypen nicht vorhanden. Ich kenne die Datentypen, da dies ein Standard-Win32-Objekt ist. Das Schema ist online und ich konnte es statisch herausfinden. Es kann jedoch benutzerdefinierte Klassen geben. Der DCOM Wmi-Ansatz ermöglichte es mir, die Eigenschaften abzufragen und ein paar weitere Details darüber herauszufinden, z. B. ihren Datentyp und ob sie ein Array waren oder nicht. Kann ich dasselbe über winrm/wsman tun? Ich weiß, dass dies über Powershell möglich ist. Ich suche nach einem winrm/wsman-Ansatz und nicht nach Powershell

Danke

Antwort1

Sie können dies auf mehrere Arten tun, wodurch ein Objekt zurückgegeben wird, das alle Werte in ihrem definierten Datentyp enthält. Sie können dann dieses Objekt nehmen und den Datentyp jedes Werts abrufen.

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

Dadurch erhalten Sie das WMI-Objekt, und von dort aus können Sie damit machen, was Sie wollen. $WMI.psobject.Members listet alle Werte auf und ermöglicht Ihnen, das Objekt zu durchlaufen und sich jeden einzelnen Wert anzusehen.

Get-WmiObject verwendet kein WS-Management, um eine Verbindung zum Remotecomputer herzustellen, und erfordert daher nicht, dass auf dem Remotecomputer WS-Management konfiguriert ist. Es verwendet hier DCOM. Wenn Sie WinRM verwenden möchten, können Sie Folgendes verwenden:

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

Die Variable darin wird ein Deserialized.System.Management.ManagementObject#root\cimv2\Win32_ComputerSystem sein, jedoch mit einigen zusätzlichen Eigenschaften.

verwandte Informationen