特定のハブに接続されているすべてのデバイスを取得するための WQL クエリとは何ですか?

特定のハブに接続されているすべてのデバイスを取得するための WQL クエリとは何ですか?

特定の USB ハブに接続されているすべてのデバイスを取得するための WMI / WQL クエリ構文は何ですか?

PS ターミナルを開いて、すべての USB ハブ デバイスを次のように列挙できます。

 gwmi Win32_UsbHub | fl *

出力には、システム上のすべての USB ハブ デバイスのリストが返されます。以下は、そのようなデバイスの 1 つの一例です。

Device ID: USB\VID_0451&PID_DD01\6&16FAF918&1&2, PNP Device ID: USB\VID_0451&PID_DD01\6&16FAF918&1&2, Description: Generic SuperSpeed USB Hub
    Availability
    Caption=Generic SuperSpeed USB Hub
    ClassCode
    ConfigManagerErrorCode=0
    ConfigManagerUserConfig=False
    CreationClassName=Win32_USBHub
    CurrentAlternateSettings
    CurrentConfigValue
    Description=Generic SuperSpeed USB Hub
    DeviceID=USB\VID_0451&PID_DD01\6&16FAF918&1&2
    ErrorCleared
    ErrorDescription
    GangSwitched
    InstallDate
    LastErrorCode
    Name=Generic SuperSpeed USB Hub
    NumberOfConfigs
    NumberOfPorts
    PNPDeviceID=USB\VID_0451&PID_DD01\6&16FAF918&1&2
    PowerManagementCapabilities
    PowerManagementSupported
    ProtocolCode
    Status=OK
    StatusInfo
    SubclassCode
    SystemCreationClassName=Win32_ComputerSystem
    SystemName=JMR-ENG-SARAH
    USBVersion

たとえば、このハブを使用してPNPDeviceID、接続されているすべてのデバイス(ある場合)を取得したいと思います。

ASSOCIATES OF私は PS と WMI については全くの初心者ですが、次のように使用することを考えました。

Get-WmiObject Win32_PnPEntity | select "ASSOCIATORS OF {Win32_UsbHub.DeviceID='USB\VID_0451&PID_DD01\6&16FAF918&1&2'}"

残念なことに、列挙では親と子が表示されませんが、デバイス マネージャーでは適切に表示され、親も表示されます。

<code>Generic USB Hub</code> と <code>Generic SuperSpeed USB Hub</code> のデバイス マネージャー ビュー (子を表示)

おそらく、私が物事を言い表した方法の問題でしょう。他の多くの方法ではエラーが発生したため、調査してこの構文を見つけました。最初はコマンドを使用することを考えましたgwmi。いずれにしても、Device Manager接続されているデバイスがあることはわかっていますが、上記のコマンドでは空白の画面が表示されました。

WMI Explorerあまり役に立ちませんでした。

WMI エクスプローラー

使用するステートメントは何でしょうかSELECT?

答え1

すごい!... WMI Explorer、何年も使われていませんでした。でもまだ持っていますし、他にも似たようなものがあります。PowerShellScript-o-Matic など 8^}

WMI Explorer の代わりに、すべて PS で書かれたより優れたものがあります。以下をご覧ください。

とにかく、あなたの質問に関してですが、PS だけですべてのことが可能なわけではありません。この種のものを実現するには、実際のコード、つまり C#/C/C+/C++ を使用する必要があるケースが数多くあります。

OS のこのような MMC で見られるものの多くは、DLL/OCX ファイルやプログラミング参照への直接呼び出しであり、PS が直接操作できるように直接公開されていません。これが Add-Type が存在する理由です。これにより、C#/C/C+/C++ などの言語構成要素を追加して、必要なものを取得したり相互運用したりすることができます。

そうは言っても…これはあなたが求めているものに近いでしょうか?

Get-WmiObject -Class Win32_USBControllerDevice | 
%{[wmi]($_.Dependent)} |
Sort Manufacturer,Description,DeviceID |
Format-Table -AutoSize -GroupBy Manufacturer Description,Service,DeviceID

   Manufacturer: (Generic USB Audio)

Description      Service  DeviceID                                     
-----------      -------  --------                                     
USB Audio Device usbaudio USB\VID_047F&PID_C009&MI_00\8&461FC04&0&0000 
USB Audio Device usbaudio USB\VID_17A0&PID_0305&MI_00\9&109E1BB1&0&0000


   Manufacturer: (Standard keyboards)

Description         Service DeviceID                                     
-----------         ------- --------                                     
HID Keyboard Device kbdhid  HID\VID_045E&PID_00DB&MI_00\A&163A9F80&0&0000


   Manufacturer: (Standard monitor types)

Description         Service DeviceID                          
-----------         ------- --------                          
Generic PnP Monitor monitor DISPLAY\ACI2183\C&8538F4&0&UID256 
Generic PnP Monitor monitor DISPLAY\ACI27F6\8&5458763&0&UID256
Generic PnP Monitor monitor DISPLAY\ACI27F6\8&5458763&0&UID257

あるいはこれ...

Get-WmiObject Win32_PNPEntity | 
Select Manufacturer,Description,Name,Service,DeviceID

または、これを見てください...

デバイス管理 PowerShell コマンドレット

このモジュールは、SetupAPI 関数を呼び出し、デバイスの列挙および管理機能を提供するコマンドレットを公開します。

https://gallery.technet.microsoft.com/デバイス管理-7fad2388


OP コメントによる更新:

あなたへの私のコメントの通りです。これはあなたが求めているものに役立つはずです。記事全体を読んでください。短いですが、ここで重要な点を追加しました。

UsbTreeView : USBデバイスとハブをユーザーフレンドリーな形式で表示します

http://flow-morewithless.blogspot.com/2014/05/usbtreeview-view-usb-devices-and-hubs.html

Microsoft は接続情報を非表示にしたいため、接続に関する情報を取得することはできません。子と親の接続情報を取得する唯一の方法は、ドライバー レベルに移動することです。

EXE にコンパイルされた Visual C プロジェクト。

https://github.com/mkielar/get-parent-device

フレンドリー名リスト(Powershellハッシュ配列)は、UsbDeviceNames.ps1ファイルにあります。

$OwnUsbDeviceNames = @{
"USB\VID_04E5&PID_0605\6&13F4C3E&0&6"    = "Hama 4port passive USB hub ( the grey one)";
"USB\VID_1A40&PID_0101\6&DF2EE03&0&5"    = "Deltaco Active Usb 2.0 cable";
"USB\VID_1A40&PID_0101\7&19BC4090&0&1"    = "Delock USB2.0 4port active mini hub (the black round one)";
"USB\VID_0403&PID_6001\FTFSDFHD"        = "FTDI Serial (COM5) to projector";
"USB\VID_0403&PID_6001\FTFXXLHS"        = "FTDI Serial (COM8) to tv";
"Something" = "is nothing"
}

PSツール

https://github.com/MarkoMarjamaa/UsbTreeView

関連情報