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

oAoBは参照であるため、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
System.String
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が彼が望んでいるのは一般的な答えだけだと述べたように(オブジェクトパスの性質とキーへの依存を考えるとこれも難しい)、Associators Of 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

上記のクエリは、オブジェクト パス ServiceName='NetLogon' を持つ Win32_Service のすべての参照を提供します。

于 2013-08-07T04:09:02.290 に答える