
¿Cuál es la sintaxis de consulta WMI/WQL para conectar todos los dispositivos a un concentrador USB específico?
Puedo abrir una terminal PS y enumerar todos los dispositivos concentradores USB, como tal:
gwmi Win32_UsbHub | fl *
El resultado devolverá una lista de todos los dispositivos concentradores USB del sistema. Aquí hay una muestra de uno de esos dispositivos.
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
Usando digamos PNPDeviceID
para este centro, me gustaría obtener todos los dispositivos conectados, si los hay.
Soy totalmente ecológico con PS y WMI, pero pensé en usarlos ASSOCIATES OF
de la siguiente manera:
Get-WmiObject Win32_PnPEntity | select "ASSOCIATORS OF {Win32_UsbHub.DeviceID='USB\VID_0451&PID_DD01\6&16FAF918&1&2'}"
Es molesto que las enumeraciones no incluyan a los padres y a los hijos, aunque el Administrador de dispositivos enumera las cosas muy bien y tiene un Padre.
Quizás simplemente la forma en que expresé las cosas. Muchas otras formas arrojaron un error, así que investigué y vi esta sintaxis. Originalmente pensé en usar un gwmi
comando. En cualquier caso, sé por Device Manager
eso que hay dispositivos conectados, pero el comando anterior arrojó una pantalla en blanco.
WMI Explorer
No fue de mucha ayuda.
¿Cuál sería la SELECT
declaración a utilizar?
Respuesta1
¡Guau!... WMI Explorer, no lo he visto usado en años. Todavía lo tengo y a otros les gusta. PowerShellScript-o-Matic y similares 8^}
Hay otros mejores en lugar de WMI Explorer, todos escritos en PS. Verificar:
http://blog.ctglobalservices.com/powershell/kaj/coretech-wmi-and-powershell-browser
https://gallery.technet.microsoft.com/PoweShell-ISE-Addon-CIM-5c9af37a
De todos modos, en cuanto a tu consulta. No todo es posible sólo con PS. Hay muchos casos en los que tienes que usar código real, es decir, C#/C/C+/C++ para obtener este tipo de cosas.
Mucho de lo que se ve en dichas MMC del sistema operativo son llamadas directas a algún archivo DLL/OCX/referencia de programación, que no está expuesto directamente para que PS actúe directamente. Esta es la razón por la que existe Add-Type, por lo que se pueden agregar C#/C/C+/C++, otras construcciones de lenguaje para obtener o interoperar con lo que se necesita.
Dicho todo esto... ¿Está esto más cerca de lo que buscas?
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
O esto...
Get-WmiObject Win32_PNPEntity |
Select Manufacturer,Description,Name,Service,DeviceID
O ver esto...
Cmdlets de PowerShell de administración de dispositivos
Este módulo expone cmdlets que llaman a funciones de SetupAPI y proporciona funciones de administración y enumeración de dispositivos.
https://gallery.technet.microsoft.com/Device-Management-7fad2388
Actualización por comentario de OP:
Según mi comentario para ti. Esto debería ser útil para lo que buscas. Puedes leer el artículo completo, es breve, pero agregué los puntos más destacados aquí.
UsbTreeView: vea los dispositivos USB y los concentradores en los que se encuentran de una forma fácil de usar
http://flow-morewithless.blogspot.com/2014/05/usbtreeview-view-usb-devices-and-hubs.html
no puede obtener información sobre las conexiones porque Microsoft quiere que esa información esté oculta. La única forma de obtener la información de conexión entre padres e hijos sería ir al nivel del controlador.
Un proyecto de Visual C compilado en un EXE.
https://github.com/mkielar/get-parent-device
Cree una lista de nombres descriptivos (matriz hash de Powershell) en el archivo 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" }
La herramienta PS