Winrm을 통해 WMI를 쿼리할 때 속성의 데이터 형식을 검색하려면 어떻게 해야 합니까?

Winrm을 통해 WMI를 쿼리할 때 속성의 데이터 형식을 검색하려면 어떻게 해야 합니까?

Winrm을 사용하면 DCOM이 아닌 WS-MAN 프로토콜을 통해 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을 통해 이 작업을 수행할 수 있다는 것을 알고 있습니다. powershell이 ​​아닌 winrm/wsman 접근 방식을 찾고 있습니다.

감사해요

답변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이지만 몇 가지 추가 속성이 있습니다.

관련 정보