#!/usr/local/perl -w use Win32::OLE('in'); use strict; # Variables my @devIds = (); my @devPnPDevIds = (); my $wmiService = Win32::OLE->GetObject("winmgmts:\\\\.\\root\\cimV2"); my $colDisks = $wmiService->ExecQuery("Select * from CIM_LogicalDevice"); foreach my $obj ( in( $colDisks ) ) { if($obj->{DeviceID} =~ /.*VID_0AF0&PID_(\d*)&MI_\d*\\(\d&.*&\d&).*/i) { my $tmpId = $obj->{DeviceID}; $tmpId =~ s/\\/\\\\/g; my $tmpPnpId = $obj->{PNPDeviceID}; $tmpPnpId =~ s/\\/\\\\/g; push(@devIds,$tmpId); push(@devPnPDevIds,$tmpPnpId); } } for(my $tel = 0; $tel < @devPnPDevIds; $tel++) { print "The detected PNP device ID is: ".$devPnPDevIds[$tel]."\n"; my $deviceID = $devPnPDevIds[$tel]; my $subDevices = $wmiService->ExecQuery('ASSOCIATORS OF {Win32_PnPEntity.DeviceID="'.$deviceID.'"} WHERE AssocClass=Win32_PnPDevice'); foreach my $subDevProp ( in( $subDevices ) ) { print "CreationClassName: ".$subDevProp->{CreationClassName}."\n"; print "Caption: ".$subDevProp->{Caption}."\n"; print "Description: ".$subDevProp->{Description}."\n"; print "DeviceID: ".$subDevProp->{DeviceID}."\n"; print "HardwareID: ".$subDevProp->{HardwareID}."\n"; print "PNPDeviceID: ".$subDevProp->{PNPDeviceID}."\n"; print "Service: ".$subDevProp->{Service}."\n"; print "SystemName: ".$subDevProp->{SystemName}."\n"; } }