How Can I Get a List of the Devices That Aren’t Working?
Hey, Scripting Guy! In Device Manager, any time a device isn’t working that device is marked with a yellow exclamation mark. How can I use a script to get a list of the devices that aren’t working?
Hey, OL. Sometimes in baseball a batter absolutely hammers one, but the ball takes a lucky bounce and lands right in your glove. That’s often referred to as a “candy hop.” Turns out that this question is the scripting equivalent of a candy hop: it looks like it might be a tough one to answer, but it turns out to be pretty easy.
WMI actually has a class – Win32_PNPEntity – that returns information about the devices found in Device Manager. Meanwhile, Win32_PNPEntity has a property – ConfigManagerErrorCode – that tells you whether or not the device is working properly. If the value of ConfigManagerErrorCode is 0, then the device appears to be working. If ConfigManagerErrorCode is anything but 0, then something must be wrong. And here’s the good part: any device with a ConfigManagerErrorCode value other than 0 will also have a little yellow exclamation mark next to it in Device Manager.
In other words, to write a script that returns a list of the devices that aren’t working properly we just need to connect to the Win32_PNPEntity class and query for all devices with a ConfigManagerErrrorCode other than 0:
strComputer = "."
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colItems = objWMIService.ExecQuery _ (“Select * from Win32_PNPEntity Where ConfigManagerErrorCode <> 0”)
For Each objItem in colItems Wscript.Echo “Name: ” & objItem.Name Next
And what if you’d like more detailed information about all the devices installed on a computer? Well, because this question turned out to be an easy one to answer, we’re feeling generous: here’s a bonus script that returns all sorts of data about installed devices:
strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_PnPEntity") For Each objItem in colItems Wscript.Echo "Class GUID: " & objItem.ClassGuid Wscript.Echo "Device is Working: " & objItem.ConfigManagerErrorCode Wscript.Echo "Description: " & objItem.Description Wscript.Echo "Device ID: " & objItem.DeviceID Wscript.Echo "Manufacturer: " & objItem.Manufacturer Wscript.Echo "Name: " & objItem.Name Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID Wscript.Echo "Service: " & objItem.Service Next
No, no charge for the bonus script. That one is on us!