Я автоматизирую удаление USB-принтера с машин с Windows XP SP3. Для этого я использую Microsoft Devcon Утилита.
Запускаем команду:
devcon findall *hp*
Возврат:
USBPRINT\HEWLETT-PACKARDHP_LASERJET_PROFESSIONAL_P1606DN\7&8885729&0&USB001: HP
LaserJet Professional P1606dn
1 matching device(s) found.
Запускаем команду:
devcon remove *USBPRINT*
Возврат:
No devices removed.
Я пробовал несколько комбинаций идентификатора оборудования и подстановочных знаков, но безуспешно. Подключение устройства к компьютеру и выполнение упомянутой выше команды удаления удаляет оборудование.
Проблема исходит от меня, когда я использую devcon piped, чтобы определить, подключено ли устройство, чтобы его можно было автоматически настроить. Если я не могу удалить его, он будет обнаружен моим скриптом, даже если он не подключен.
Я тестировал это с несколькими USB-принтерами и одной USB-мышью, все они демонстрируют одинаковое поведение, что наводит меня на мысль, что это нормальное поведение для Devcon.
Есть ли обходной путь? Как удалить аппаратные записи, которые больше не подключены?
Devcon действительно работает. Вам просто нужно убедиться, что вы выбрали правильную версию devcon для своей операционной системы.
Взгляните на эту ссылку http://freneticrapport.blogspot.com/2011/05/windows-hiddennot-connected-device.html.
Для установки правильной версии devcon для вашей ОС:
build -ceZ
Затем вы можете удалить устройство с помощью следующей команды:
devcon remove "@PCI\VEN_1000&DEV_0060&SUBSYS_1F0C1028&REV_04\4&10333E29&0&0030"
Обратите внимание на цитаты и @ символ, поскольку они необходимы для удаления скрытых устройств.
devon может и удалит отсутствующее оборудование, как упомянул GregL.
Строка должна быть правильно сформирована.
Следующий командный файл сопоставит все устройства на основе входной строки и удалит их:
for /f %%i in ('devcon findall *%1*') do (devcon remove "@%%i")
Devcon не может удалите оборудование, которое в настоящее время не подключено. Это предполагаемое поведение. Я должен был лучше прочитать документацию.
В findall
команда ищет ВСЕ оборудование, подключенное или нет. Я должен был использовать find
команда, которая ищет только подключенное в данный момент оборудование.