Wylistowanie urządzeń USB
Ktos
W jaki sposób można uzyskać listę oraz przykładowo identyfikatory urządzeń USB obecnych w naszym systemie? Należy skorzystać z klas WMI, a dokładniej Win32_USBControllerDevice. Jednak samo użycie polecenia
Get-WmiObject Win32_USBControllerDevice
zwróciłoby nieczytelną listę wielu właściwości kontrolerów. Najważniejszą do zrozumienia rzeczą jest to, że klasa ta opisuje zależności pomiędzy samym kontrolerem (Atecentent) oraz urządzeniami do niego podłączonymi (Dependent). Jednak nawet samo użycie wspomnianego polecenia z listowaniem (Format-List Antecedent,Dependent) także nie daje zadowalających rezultatów, bo nadal widoczne są straszliwie nieczytelne dla człowieka ścieżki WMI.
PS E:\> gwmi win32_usbcontrollerdevice | fl antecedent,dependent
antecedent : \\JESS\root\cimv2:Win32_USBController.DeviceID="PCI\\VEN_8086&DEV_27C8&SUBSYS_30A2103C&REV_01\\3&33FD14CA&
0&E8"
dependent : \\JESS\root\cimv2:Win32_PnPEntity.DeviceID="USB\\ROOT_HUB\\4&6F1F2E5&0"
(...)
Jednak posiadając ścieżki WMI można jedynie rzutując je do typu "WMI" uzyskać obiekty, z których już bardzo łatwo da się uzyskać sam interesujący nas DeviceID. Wystarczy potem jedynie wyświetlić to na przykład w formie tabeli.
Get-WmiObject Win32_USBControllerDevice | ForEach-Object { [WMI]$_.Dependent } | Format-Table Description,DeviceID
I voila! Otrzymujemy listę urządzeń USB w naszym systemie wraz z ich identyfikatorami sprzętowymi.
PS E:\> gwmi win32_usbcontrollerdevice | %{[wmi]$_.Dependent} | ft description,deviceid
description deviceid
----------- --------
USB Root Hub USB\ROOT_HUB\4&6F1F2E5&0
USB Root Hub USB\ROOT_HUB\4&1C613B58&0
USB Root Hub USB\ROOT_HUB\4&1FB366D1&0
USB Human Interface Device USB\VID_045E&PID_00B9\5&32433DF1&0&2
HID-compliant consumer control device HID\VID_045E&PID_00B9&COL01\6&34CFFD53&0&0000
HID-compliant mouse HID\VID_045E&PID_00B9&COL02\6&34CFFD53&0&0001
USB Root Hub USB\ROOT_HUB\4&3156ABA9&0
USB Root Hub USB\ROOT_HUB20\4&E98E22D&0