WQL-Abfrage, um alle Geräte an einen bestimmten Hub anzuschließen

797
Sarah Weinberger

Wie lautet die WMI / WQL-Abfragesyntax, um alle Geräte an einen bestimmten USB-Hub anzuschließen?

Ich kann ein PS-Terminal öffnen und alle USB-Hub-Geräte als solche auflisten:

 gwmi Win32_UsbHub | fl * 

Die Ausgabe gibt eine Liste aller USB-Hub-Geräte im System zurück. Hier ist eine Auswahl eines solchen Geräts.

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 

Wenn Sie beispielsweise PNPDeviceIDfür diesen Hub sprechen, würde ich gerne alle angeschlossenen Geräte erhalten, falls vorhanden.

Ich bin total grün mit PS und WMI, aber ich dachte an ASSOCIATES OFFolgendes zu verwenden:

Get-WmiObject Win32_PnPEntity | select "ASSOCIATORS OF " 

Verblüffenderweise listen Aufzählungen übergeordnete und untergeordnete Elemente nicht auf, obwohl der Geräte-Manager die Dinge gut auflistet und über ein übergeordnetes Element verfügt.

Ansicht des Geräte-Managers eines <code> Generic USB Hub </ code> und <code> Generic SuperSpeed ​​USB Hub </ code> Anzeigen von Kindern

Vielleicht genau so, wie ich Dinge formuliert habe. Viele andere Möglichkeiten haben einen Fehler ausgelöst, also habe ich nachgesehen und diese Syntax gesehen. Ich dachte ursprünglich daran, einen gwmiBefehl zu verwenden. Ich weiß auf jeden Fall, Device Managerdass es angeschlossene Geräte gibt, aber der obige Befehl ergab einen leeren Bildschirm.

WMI Explorer war nicht viel hilfe.

WMI Explorer

Welche SELECTAussage wäre zu verwenden?

0

1 Antwort auf die Frage

0
postanote

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

Statt WMI Explorer gibt es bessere, alle in PS geschrieben. Auschecken:

http://blog.ctglobalservices.com/powershell/kaj/coretech-wmi-and-powershell-browser

https://gallery.technet.microsoft.com/PoweShell-ISE-Addon-CIM-5c9af37a

Wie auch immer, für Ihre Anfrage. Nicht alle Dinge sind mit PS alleine möglich. Es gibt viele Fälle, in denen Sie echten Code verwenden müssen, dh C # / C / C + / C ++, um diese Art von Informationen zu erhalten.

Eine Menge von dem, was Sie in solchen MMCs des Betriebssystems sehen, sind Aufrufe von DLL- / OCX-Dateien / Programmierreferenzen, die nicht direkt für PS verfügbar sind, um direkt darauf zu reagieren. Aus diesem Grund gibt es Add-Type, also kann man C # / C / C + / C ++ oder andere Sprachkonstrukte hinzufügen, um das zu bekommen, was benötigt wird.

All das wird gesagt ... Ist das näher an dem, was Sie suchen?

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 das ...

PowerShell-Cmdlets für die Geräteverwaltung

Dieses Modul macht Cmdlets verfügbar, die in SetupAPI-Funktionen aufgerufen werden, und bietet Geräteauflistung und Verwaltungsfunktionen.

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

Update pro OP-Kommentar

Wie in meinem Kommentar an Sie. Dies sollte nützlich sein für das, was Sie suchen. Sie können den gesamten Artikel lesen, er ist kurz, aber ich habe hier die wichtigsten Punkte hinzugefügt.

UsbTreeView: Zeigen Sie USB-Geräte und Hubs in benutzerfreundlicher 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 wünscht, dass diese Informationen ausgeblendet werden. Der Zugriff auf die Informationen zu den untergeordneten Parent-Verbindungen wäre nur auf Treiberebene möglich.

Ein Visual C-Projekt, das zu einer EXE-Datei kompiliert wurde.

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

Erstellen Sie eine Liste mit befreundeten Namen (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

Vielen Dank, dass Sie sich die Zeit genommen haben, um zu antworten, jedoch nein. Was ich danach suche ist, dass ich die Geräte-ID eines bestimmten USB-Hubs, wie "Generic SuperSpeed ​​USB-Hub USBHUB3 USB \ VID_0451 & PID_DD01 \ 6 & 16FAF918 & 1 & 2", angeben und alle in diesen Hub eingesteckten Geräte zurückbekomme. Ja, mir ist klar, dass einige externe USB-Hubs einen "root" -Unterhub besitzen, der eine Stufe tiefer gehen muss, um Zugriff auf alle an den Hub angeschlossenen Geräte zu erhalten. Der Geräte-Manager macht einen guten Job, ich muss das gleiche im Code tun. Sarah Weinberger vor 5 Jahren 0
Das andere Szenario hier ist, dass die von Ihnen gewünschte Zeichenfolge 4 verschiedene Eigenschaften (Name, Beschriftung) ist und die Zeichenfolgen * ID (Device, PnP) mehrere Zeichen enthalten, die in PS als reserviert / speziell betrachtet werden abspielen. DM tut dies natürlich durch das Design, und wie viele andere Dinge ist MS dafür bekannt, dass es eine Menge Strangifizierungen durchführt, um es für Menschen lesbarer zu machen, auch wenn die eigentliche Quelle nicht mit der Anzeige übereinstimmt. Ich habe ein bisschen mehr herumgespielt und sah bisher nicht vielversprechend aus. postanote vor 5 Jahren 0
Angenommen, eine C # -Lösung, wie würde die Lösung aussehen? Natürlich ist die Lösung möglich, da der Geräte-Manager den Hub und die angeschlossenen Geräte anzeigt. Sarah Weinberger vor 5 Jahren 0
Ich bin ein echter Schwindler, und wenn ich etwas interessantes finde, speichere ich es, weil ich weiß, dass es früher oder später kommen wird, um mir zu helfen oder mich zu verfolgen. Sehen Sie mein Update für Sie. Sie werden feststellen, dass die Lösung aus zwei Teilen besteht. Eine ausführbare VC-Datei und dann das PS-Zeug. Es ist nicht mein Code, nur ein Artikel, den ich von circa 2014 habe. postanote vor 5 Jahren 0