如何从WMI对象引用中获取WMI对象?

时间:2013-08-07 00:11:08

标签: powershell wmi wmi-query

与此question类似,不同之处在于没有给出关于从引用中获取对象的主要问题的答案。

例如:

PS C:\Users\admin> Get-WmiObject -Namespace $namespace -Class $class


    ...

IsActive     :  1
oA: \\.\ROOT\abc\abc\ABC:abc.xyz="tst2"
oB : \\.\ROOT\abc\abc\ABC:abc.xyz="tst3"
PSComputerName         : admin-test2

oAoB是引用,因此在powershell中作为字符串出现。有没有办法在powershell中使用WMI查询获取它们所代表的对象?

2 个答案:

答案 0 :(得分:6)

假设oAoB实际上是字符串,您应该能够将这些WMI路径解析为WMI对象,如下所示:

Get-WmiObject -Namespace $namespace -Class $class | % {
  $oA = [wmi]$_.oA
  $oB = [wmi]$_.oB
}

示例:

PS C:\> $namespace = 'root/cimv2'
PS C:\> $class = 'Win32_OperatingSystem'
PS C:\> $obj1 = Get-WmiObject -Namespace $namespace -Class $class
PS C:\> $obj1

SystemDirectory : C:\Windows\system32
Organization    :
BuildNumber     : 7601
RegisteredUser  : foo
SerialNumber    : 00371-OEM-8310595-XXXXX
Version         : 6.1.7601


PS C:\> $obj1.GetType().FullName
System.Management.ManagementObject
PS C:\> $obj1.Path.Path
\\FOO\root\cimv2:Win32_OperatingSystem=@
PS C:\> ($obj1.Path.Path).GetType().FullName
System.String
PS C:\> $obj2 = [wmi]$obj1.Path.Path
PS C:\> $obj2

SystemDirectory : C:\Windows\system32
Organization    :
BuildNumber     : 7601
RegisteredUser  : foo
SerialNumber    : 00371-OEM-8310595-XXXXX
Version         : 6.1.7601


PS C:\> $obj2.GetType().FullName
System.Management.ManagementObject

但是你的问题很模糊,所以我不确定这个答案是否真的涵盖了你一直在问的问题。

答案 1 :(得分:2)

由于OP提到他想要的只是一个通用的答案(考虑到对象路径的性质和对密钥的依赖性,这又是一个难点),我给出了另一个使用WMI查询的协作者的例子。

$query = "ASSOCIATORS OF {Win32_Account.Name='DemoGroup2',Domain='DomainName'} WHERE Role=GroupComponent ResultClass=Win32_Account"
Get-WMIObject -Query $query | Select Name

如果您需要使用上面的示例,您需要首先找出关键属性是什么,并在对象路径中使用它。

-----原始答案-----

什么命名空间?什么级别?您需要使用关联和/或引用来检索它。除非我们知道确切的对象路径,否则很难给出通用答案。例如,

$query = "REFERENCES OF {Win32_Service.Name='Netlogon'} WHERE ClassDefsOnly"
Get-WMIObject -Query $query

以上查询将为Win32_Service的所有引用提供对象路径ServiceName ='NetLogon'