¿Qué es una consulta WQL para conectar todos los dispositivos a un concentrador específico?

¿Qué es una consulta WQL para conectar todos los dispositivos a un concentrador específico?

¿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 PNPDeviceIDpara 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 OFde 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.

Vista del Administrador de dispositivos de un <code>Hub USB genérico</code> y un <code>Hub USB SuperSpeed ​​genérico</code> mostrando niños

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 gwmicomando. En cualquier caso, sé por Device Managereso que hay dispositivos conectados, pero el comando anterior arrojó una pantalla en blanco.

WMI ExplorerNo fue de mucha ayuda.

Explorador WMI

¿Cuál sería la SELECTdeclaració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:

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

https://github.com/MarkoMarjamaa/UsbTreeView

información relacionada