Was ist eine WQL-Abfrage, um alle mit einem bestimmten Hub verbundenen Geräte abzurufen?

Was ist eine WQL-Abfrage, um alle mit einem bestimmten Hub verbundenen Geräte abzurufen?

Wie lautet die WMI-/WQL-Abfragesyntax, um alle mit einem bestimmten USB-Hub verbundenen Geräte abzurufen?

Ich kann ein PS-Terminal öffnen und alle USB-Hub-Geräte wie folgt aufzählen:

 gwmi Win32_UsbHub | fl *

Die Ausgabe gibt eine Liste aller USB-Hub-Geräte im System zurück. Hier ist ein Beispiel für ein solches Gerät.

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

Mithilfe von beispielsweise PNPDeviceIDdiesem Hub möchte ich alle angeschlossenen Geräte (sofern vorhanden) abrufen.

Ich bin kein Neuling in Sachen PS und WMI, aber ich dachte daran, ASSOCIATES OFFolgendes zu verwenden:

Get-WmiObject Win32_PnPEntity | select "ASSOCIATORS OF {Win32_UsbHub.DeviceID='USB\VID_0451&PID_DD01\6&16FAF918&1&2'}"

Ärgerlicherweise werden in den Aufzählungen keine übergeordneten und untergeordneten Elemente aufgeführt, obwohl der Geräte-Manager die Dinge ordentlich auflistet und über ein übergeordnetes Element verfügt.

Gerätemanager-Ansicht eines <code>Generic USB Hub</code> und <code>Generic SuperSpeed ​​USB Hub</code> mit Anzeige der untergeordneten

Vielleicht nur die Art, wie ich die Dinge formuliert habe. Viele andere Möglichkeiten haben einen Fehler verursacht, also habe ich nachgeforscht und diese Syntax gesehen. Ursprünglich dachte ich daran, einen gwmiBefehl zu verwenden. Auf jeden Fall weiß ich, Device Managerdass Geräte angeschlossen sind, aber der obige Befehl hat einen leeren Bildschirm ergeben.

WMI Explorerwar keine große Hilfe.

WMI-Explorer

Welche Anweisung sollte SELECTverwendet werden?

Antwort1

Wow!... WMI Explorer, ich habe das seit Jahren nicht mehr im Einsatz gesehen. Ich habe es aber immer noch, und andere mögen es. PowerShellScript-o-Matic und dergleichen 8^}

Es gibt bessere als WMI Explorer, alle in PS geschrieben. Schauen Sie sich das an:

Wie auch immer, was Ihre Frage betrifft. Nicht alles ist allein mit PS möglich. Es gibt viele Fälle, in denen Sie echten Code verwenden müssen, also C#/C/C+/C++, um diese Art von Dingen zu erreichen.

Vieles, was Sie in solchen MMCs des Betriebssystems sehen, sind direkte Aufrufe an eine DLL/OCX-Datei/Programmierreferenz, die nicht direkt verfügbar ist, damit PS direkt darauf reagieren kann. Aus diesem Grund gibt es Add-Type, damit man C#/C/C+/C++ und andere Sprachkonstrukte hinzufügen kann, um das zu erhalten oder damit zu interagieren, was benötigt wird.

Abgesehen davon … kommt das Ihrem Ziel näher?

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

Oder dieses...

Get-WmiObject Win32_PNPEntity | 
Select Manufacturer,Description,Name,Service,DeviceID

Oder sehen Sie sich das an ...

PowerShell-Cmdlets zur Geräteverwaltung

Dieses Modul stellt Cmdlets bereit, die SetupAPI-Funktionen aufrufen und Geräteaufzählungs- und Verwaltungsfunktionen bereitstellen.

https://gallery.technet.microsoft.com/Device-Management-7fad2388


Update gemäß OP-Kommentar:

Wie in meinem Kommentar an Sie. Das sollte für Ihr Anliegen hilfreich sein. Sie können den ganzen Artikel lesen, er ist kurz, aber ich habe die wichtigsten Punkte hier hinzugefügt.

UsbTreeView: Zeigen Sie USB-Geräte und Hubs, in denen sie sich befinden, in einer benutzerfreundlichen Form an

http://flow-morewithless.blogspot.com/2014/05/usbtreeview-view-usb-devices-and-hubs.html

Sie können keine Informationen zu den Verbindungen abrufen, da Microsoft möchte, dass diese Informationen verborgen bleiben. Die einzige Möglichkeit, an die Informationen zu den untergeordneten und übergeordneten Verbindungen zu gelangen, besteht darin, auf die Treiberebene zu gehen.

Ein in eine EXE kompiliertes Visual C-Projekt.

https://github.com/mkielar/get-parent-device

Erstellen Sie eine benutzerfreundliche Namensliste (Powershell-Hash-Array) in der Datei 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"
}

Das PS-Tool

https://github.com/MarkoMarjamaa/UsbTreeView

verwandte Informationen