WQL Query для подключения всех устройств к определенному хабу

752
Sarah Weinberger

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

Я могу открыть терминал 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 " 

Досадно, что в перечислениях не перечисляются родительские и дочерние элементы, хотя диспетчер устройств хорошо отображает список и имеет родительский элемент.

Device Manager view of a <code>Generic USB Hub</code> and <code>Generic SuperSpeed USB Hub</code> Showing Children

Может быть, просто так, как я сформулировал вещи. Многие другие способы вызвали ошибку, поэтому я провел исследование и увидел этот синтаксис. Я изначально думал об использовании gwmiкоманды. В любом случае, я знаю, Device Managerчто есть подключенные устройства, но приведенная выше команда выдает пустой экран.

WMI Explorer не было большой помощи.

WMI Explorer

Какое SELECTзаявление использовать?

0

1 ответ на вопрос

0
postanote

Ух ты! ... 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 ++, чтобы получить такие вещи.

Многое из того, что вы видите в таких 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

спасибо, что нашли время ответить, однако нет. После этого я указываю идентификатор устройства конкретного USB-концентратора, такого как «Универсальный USB-концентратор SuperSpeed ​​USBHUB3 USB \ VID_0451 & PID_DD01 \ 6 & 16FAF918 & 1 & 2», и возвращаю все устройства, подключенные к этому концентратору. Да, я понимаю, что некоторые внешние USB-концентраторы имеют «корневой» суб-концентратор, который требует перехода на один уровень глубже, чтобы получить доступ ко всем устройствам, подключенным к концентратору. Диспетчер устройств делает хорошую работу, просто мне нужно сделать то же самое в коде. Sarah Weinberger 6 лет назад 0
Другой сценарий здесь состоит в том, что строка, которую вы хотите использовать, - это 4 разных свойства (Name, Caption), а строки * ID (Device, PnP) содержат несколько символов, которые считаются зарезервированными / особыми в PS, таким образом, завершение символа входит в играть. DM, конечно же, делает это по своему замыслу, и, как и многие другие вещи, MS известна тем, что делает много разветвлений, чтобы сделать их более читабельными, хотя фактический источник не похож на то, что отображается. Я немного поиграл, и пока не выглядел многообещающе. postanote 6 лет назад 0
Если предположить, что решение на C #, то как оно будет выглядеть? Очевидно, что решение возможно, так как Диспетчер устройств показывает концентратор и подключенные устройства. Sarah Weinberger 6 лет назад 0
Я - настоящий похититель данных, и когда я нахожу что-то интересное, я сохраняю его, зная, что оно может вернуться или помочь мне рано или поздно. Смотрите мое обновление для вас. Вы заметите, что решение состоит из двух частей. Исполняемый файл VC и затем материал PS. Это не мой код, просто предмет, который у меня есть примерно с 2014 года. postanote 6 лет назад 0