Is there an equivalent to Linux's lsusb in Windows?

To list the plugged in usb devices from software, preferably a shell.

Linux, or at least some Linuies seem to have a command to do that lsusb


You can play around with Get-PnpDevice, and its Parameters -Class, -Status and -InstanceId

See the different outputs (I used -Status OK in all examples, since I believe you need that to get the currently active ones. If you want to see everything, don't use this parameter):

InstanceId (Will only show stuff where InstanceId like 'USB*'):

PS C:\> Get-PnpDevice -InstanceId 'USB*' -Status OK

Status     Class           FriendlyName                  InstanceId
------     -----           ------------                  ----------
OK         HIDClass        USB-Input device              USB\VID_03F0&P…
OK         HIDClass        USB-Input device              USB\VID_0B0E&P…
OK         MEDIA           Logitech BRIO                 USB\VID_046D&P…
OK         USB             USB-Root-Hub (USB 3.0)        USB\ROOT_HUB30…
OK         USB             Logitech BRIO                 USB\VID_046D&P…
OK         USB             USB-Composite unit            USB\VID_0B0E&P…
OK         MEDIA           Jabra PRO 9460                USB\VID_0B0E&P…
OK         Image           Logitech BRIO                 USB\VID_046D&P…
OK         HIDClass        USB-Input device              USB\VID_1BCF&P…
OK         HIDClass        USB-Input device              USB\VID_03F0&P…
OK         USB             USB-Composite unit            USB\VID_03F0&P…

Class (See the difference to InstanceId, we have one return with InstanceId PCI*):

PS C:\> Get-PnpDevice -Class 'USB' -Status OK

Status     Class           FriendlyName                  InstanceId
------     -----           ------------                  ----------
OK         USB             USB-Root-Hub (USB 3.0)        USB\ROOT_HUB30…
OK         USB             Logitech BRIO                 USB\VID_046D&P…
OK         USB             USB-Composite unit            USB\VID_0B0E&P…
OK         USB             Intel(R) USB 3.0 eXtensi...   PCI\VEN_8086&D…
OK         USB             USB-Composite unit            USB\VID_03F0&P…

InstanceId and Class (the most strict one):

PS C:\> Get-PnpDevice -InstanceId 'USB*' -Class USB -Status OK

Status     Class           FriendlyName                  InstanceId
------     -----           ------------                  ----------
OK         USB             USB-Root-Hub (USB 3.0)        USB\ROOT_HUB30…
OK         USB             Logitech BRIO                 USB\VID_046D&P…
OK         USB             USB-Composite unit            USB\VID_0B0E&P…
OK         USB             USB-Composite unit            USB\VID_03F0&P…

Then you can create a function and put it in your PowerShell Profile, and simply use it like you would in Linux

PS C:\> Function lsusb { Get-PnpDevice -InstanceId 'USB*' -Class 'USB' -Status OK }
PS C:\> lsusb

Status     Class           FriendlyName                  InstanceId
------     -----           ------------                  ----------
OK         USB             USB-Root-Hub (USB 3.0)        USB\ROOT_HUB30…
OK         USB             Logitech BRIO                 USB\VID_046D&P…
OK         USB             USB-Composite unit            USB\VID_0B0E&P…
OK         USB             USB-Composite unit            USB\VID_03F0&P…

Play around with the Get-PnPDevice cmdlet and see what fits your needs.