use strict; use warnings; use Win32::OLE qw(in); my $Computer = $ARGV[0] || '.'; my $Wmi = Win32::OLE->GetObject("WinMgmts://$Computer/root/cimv2") or die Win32::OLE->LastError; my $devices = $Wmi->ExecQuery("SELECT * FROM Win32_PNPEntity Where DeviceID like 'USB%'") or die Win32::OLE->LastError; print join $/ => map { my $device = $_; map { "$_: " . $device->{$_} } qw(DeviceID PNPDeviceID Description) } in $devices;