
Каков синтаксис запроса 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'}"
Досадно, что перечисления не содержат родительских и дочерних элементов, хотя диспетчер устройств хорошо перечисляет элементы и имеет родительский элемент.
Может быть, просто так я сформулировал. Многие другие способы выдавали ошибку, поэтому я провел исследование и увидел этот синтаксис. Изначально я думал использовать команду 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++, чтобы получить такие вещи.
Многое из того, что вы видите в таких 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