0

类似于这个问题 ,除了没有给出关于从引用中获取对象的主要问题的答案。

例如:

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

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

4

2 回答 2

6

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

Get-WmiObject -Namespace $namespace -Class $class | ForEach-Object {
    $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

系统目录:C:\Windows\system32
组织 :
内部编号:7601
注册用户:foo
序列号:00371-OEM-8310595-XXXXX
版本: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
系统字符串
PS C:\> $obj2 = [wmi]$obj1.Path.Path 
PS C:\> $obj2

系统目录:C:\Windows\system32
组织 :
内部编号:7601
注册用户:foo
序列号:00371-OEM-8310595-XXXXX
版本:6.1.7601


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

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

于 2013-08-11T11:37:08.113 回答
3

正如 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'

于 2013-08-07T04:09:02.290 回答