
Qual é a sintaxe de consulta WMI/WQL para conectar todos os dispositivos a um hub USB específico?
Posso abrir um terminal PS e enumerar todos os dispositivos de hub USB, como tal:
gwmi Win32_UsbHub | fl *
A saída retornará uma lista de todos os dispositivos USB Hub no sistema. Aqui está uma amostra de um desses 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
, este hub, gostaria de obter todos os dispositivos conectados, se houver.
Sou totalmente verde com PS e WMI, mas pensei em usar ASSOCIATES OF
da seguinte forma:
Get-WmiObject Win32_PnPEntity | select "ASSOCIATORS OF {Win32_UsbHub.DeviceID='USB\VID_0451&PID_DD01\6&16FAF918&1&2'}"
Irritantemente, as enumerações não listam pais e filhos, embora o Gerenciador de Dispositivos liste as coisas muito bem e tenha um Pai.
Talvez apenas a maneira como expressei as coisas. Muitas outras maneiras geraram um erro, então pesquisei e vi essa sintaxe. Originalmente pensei em usar um gwmi
comando. De qualquer forma, sei Device Manager
que existem dispositivos conectados, mas o comando acima gerou uma tela em branco.
WMI Explorer
não ajudou muito.
Qual seria a SELECT
declaração a ser usada?
Responder1
Uau!... WMI Explorer, não vejo isso usado há anos. Eu ainda o tenho, e outros gostam. PowerShellScript-o-Matic e similares 8^}
Existem outros melhores em vez do WMI Explorer, todos escritos em PS. Confira:
http://blog.ctglobalservices.com/powershell/kaj/coretech-wmi-and-powershell-browser
https://gallery.technet.microsoft.com/PoweShell-ISE-Addon-CIM-5c9af37a
De qualquer forma, quanto à sua consulta. Nem todas as coisas são possíveis apenas com PS. Há muitos casos em que você precisa usar código real, ou seja, C#/C/C+/C++ para obter esse tipo de coisa.
Muito do que você vê nesses MMCs do sistema operacional são chamadas diretamente para algum arquivo DLL/OCX/referência de programação, que não é exposto diretamente para o PS agir diretamente. É por isso que Add-Type existe, então, pode-se adicionar C#/C/C+/C++, outras construções de linguagem para obter ou interoperar com o que é necessário.
Tudo o que foi dito… Isso está mais próximo do que você procura?
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
Ou isto...
Get-WmiObject Win32_PNPEntity |
Select Manufacturer,Description,Name,Service,DeviceID
Ou veja isso...
Cmdlets do PowerShell para gerenciamento de dispositivos
Este módulo expõe cmdlets que chamam funções SetupAPI e fornece enumeração de dispositivos e funções de gerenciamento.
https://gallery.technet.microsoft.com/Device-Management-7fad2388
Atualização por comentário do OP:
De acordo com meu comentário para você. Isso deve ser útil para o que você procura. Você pode ler o artigo inteiro, é curto, mas adicionei os pontos mais importantes aqui.
UsbTreeView: visualize dispositivos USB e hubs em que eles estão de uma forma amigável
http://flow-morewithless.blogspot.com/2014/05/usbtreeview-view-usb-devices-and-hubs.html
você não pode obter informações sobre as conexões porque a Microsoft deseja que essas informações sejam ocultadas. A única maneira de obter as informações da conexão filho-pai seria ir para o nível do driver.
Um projeto Visual C compilado em um EXE.
https://github.com/mkielar/get-parent-device
Crie uma lista de nomes amigáveis (matriz hash do Powershell) no arquivo 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" }
A ferramenta PS