
特定の 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'}"
残念なことに、列挙では親と子が表示されませんが、デバイス マネージャーでは適切に表示され、親も表示されます。
おそらく、私が物事を言い表した方法の問題でしょう。他の多くの方法ではエラーが発生したため、調査してこの構文を見つけました。最初はコマンドを使用することを考えましたgwmi
。いずれにしても、Device Manager
接続されているデバイスがあることはわかっていますが、上記のコマンドでは空白の画面が表示されました。
WMI Explorer
あまり役に立ちませんでした。
使用するステートメントは何でしょうかSELECT
?
答え1
すごい!... WMI Explorer、何年も使われていませんでした。でもまだ持っていますし、他にも似たようなものがあります。PowerShellScript-o-Matic など 8^}
WMI Explorer の代わりに、すべて PS で書かれたより優れたものがあります。以下をご覧ください。
http://blog.ctglobalservices.com/powershell/kaj/coretech-wmi-and-powershell-browser
https://gallery.technet.microsoft.com/PoweShell-ISE-Addon-CIM-5c9af37a
とにかく、あなたの質問に関してですが、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 関数を呼び出し、デバイスの列挙および管理機能を提供するコマンドレットを公開します。
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ツール