透過 Winrm 查詢 WMI 時如何擷取屬性的資料類型

透過 Winrm 查詢 WMI 時如何擷取屬性的資料類型

Winrm 允許我透過 WS-MAN 協定(而不是 DCOM)查詢 WMI。但是,在 DCOM 實作中,我可以檢索我查詢的各種類別的各種屬性的資料類型。但是,如果我使用 winrm,我只會取回這些值。有什麼辦法可以查詢資料類型嗎?

例如 c:> winrm enum wmicimv2/* -dialect:wql -filter:"Select * 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

謝謝

答案1

您可以透過多種方式執行此操作,這將傳回一個對象,該對象全部具有定義的資料類型。然後,您可以取得該物件並取得每個值的資料類型。

$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,但增加了一些屬性。

相關內容