Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm automating the removal of a USB printer from machines with Windows XP SP3. To do this, I'm using Microsoft's Devcon Utility.

Running the command:

devcon findall *hp*


LaserJet Professional P1606dn
1 matching device(s) found.

Running the command:

devcon remove *USBPRINT*


No devices removed.

I've tried multiple combinations of the Hardware ID and wildcards with no luck. Plugging the device in to the computer and running the remove command mentioned above removes the hardware.

The issue comes from me using devcon piped to find to determine if the device is plugged in so that it can be automatically configured. If I can't remove it, it will be detected by my script even if it isn't plugged in.

I've tested this with multiple USB printers and one USB mouse, all exhibit the same behavior, which leads me to believe this is normal behavior for Devcon.

Is there a workaround? How do I remove hardware entries that are no longer connected?

share|improve this question

Devcon does work. You just need to make sure you are targeting the right version of devcon for your operation system.

Take a look at this link

For installing the correct devcon version for your OS:

  • Install the Windows Driver Kit
  • Go to Start -> Programs -> Development Kits -> WDK XXXX -> Build Environments -> Windows [Target] -> Windows [Target] Free Build Environment, replacing [Target] with the appropriate version of Windows you are building for.
  • Go to the src\setup\devcon folder in the WDK install directory and run: build -ceZ

You can then remove the device with the following command:

devcon remove "@PCI\VEN_1000&DEV_0060&SUBSYS_1F0C1028&REV_04\4&10333E29&0&0030"

Take note of the quotes and @ symbol as these are required to allow hidden devices to be removed.

share|improve this answer
up vote 0 down vote accepted

This isn't possible. Devcon cannot remove hardware that isn't currently connected. This is intended behavior. I should have read the documentation better.

The findall command searches for ALL hardware, connected or not. I should have been using the find command, which only searches for currently connected hardware.

share|improve this answer

devon can and will remove non present hardware as GregL mentioned.

The string must be formated correctly.

The following batch file will match all devices based on the input string and remove them:

for /f %%i in ('devcon findall *%1*') do (devcon remove "@%%i")
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.