Что такое WQL-запрос для подключения всех устройств к определенному концентратору?

Что такое WQL-запрос для подключения всех устройств к определенному концентратору?

Каков синтаксис запроса WMI/WQL для подключения всех устройств к определенному USB-концентратору?

Я могу открыть PS-терминал и перечислить все USB-концентраторы, например:

 gwmi Win32_UsbHub | fl *

Вывод вернет список всех устройств USB Hub в системе. Вот пример одного такого устройства.

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 и предоставляют функции перечисления и управления устройствами.

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 хочет, чтобы эта информация была скрыта. Единственный способ получить информацию о соединениях «дочерний-родительский» — перейти на уровень драйвера.

Проект Visual C, скомпилированный в EXE-файл.

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

Связанный контент