什么是 WQL 查询来获取连接到特定集线器的所有设备?

什么是 WQL 查询来获取连接到特定集线器的所有设备?

获取连接到特定 USB 集线器的所有设备的 WMI / WQL 查询语法是什么?

我可以打开 PS 终端并枚举所有 USB 集线器设备,如下所示:

 gwmi Win32_UsbHub | fl *

输出将返回系统上所有 USB 集线器设备的列表。以下是此类设备的一个示例。

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这个集线器,我想获取所有连接的设备(如果有的话)。

我对 PS 和 WMI 非常熟悉,但我想到使用ASSOCIATES OF如下方法:

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

令人恼火的是,枚举没有列出父级和子级,尽管设备管理器确实很好地列出了事物并且有一个父级。

<code>通用 USB 集线器</code> 和 <code>通用超高速 USB 集线器</code> 的设备管理器视图,显示子集线器

也许只是我表达的方式。许多其他方法都会出错,所以我做了研究并看到了这个语法。我最初想到使用命令gwmi。无论如何,我知道Device Manager有连接的设备,但上述命令产生了一个空白屏幕。

WMI Explorer没有太大帮助。

WMI 资源管理器

SELECT应该使用什么样的语句?

答案1

哇!... WMI Explorer,我已经好几年没见过它使用了。不过我仍然有它,其他人也喜欢它。PowerShellScript-o-Matic 等 8^}

有比 WMI Explorer 更好的程序,都是用 PS 编写的。请查看:

无论如何,对于您的疑问。仅使用 PS 并非可以实现所有事情。在很多情况下,您必须使用真实代码(即 C#/C/C+/C++)才能获得此类内容。

您在操作系统的此类 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 函数的 cmdlet 并提供设备枚举和管理功能。

https://gallery.technet.microsoft.com/Device-Management-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

在文件 UsbDeviceNames.ps1 中创建一个友好名称列表(Powershell 哈希数组)

$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

相关内容