
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 PNPDeviceID
diesem 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 OF
Folgendes 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.
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 gwmi
Befehl zu verwenden. Auf jeden Fall weiß ich, Device Manager
dass Geräte angeschlossen sind, aber der obige Befehl hat einen leeren Bildschirm ergeben.
WMI Explorer
war keine große Hilfe.
Welche Anweisung sollte SELECT
verwendet 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:
http://blog.ctglobalservices.com/powershell/kaj/coretech-wmi-and-powershell-browser
https://gallery.technet.microsoft.com/PoweShell-ISE-Addon-CIM-5c9af37a
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