Включение/Отключение устройства из командной строки (CMD)

.

У меня на компьютере возникала такая проблема, что после пробуждения из спящего режима переставала работать DVB карта для просмотра спутникового ТВ, в диспетчере устройств в свойствах карты писалось что «Запуск этого устройства невозможен». И тогда мне что бы включить телевидение приходилось заходить в диспетчер устройств, отключать карту, потом заново включать и уже потом я мог включить программу для просмотра ТВ. Тогда я решил немного автоматизировать процесс: при клике на ярлык программы просмотра, должен был запускаться батник (bat-файл),  который сначала бы отключал карту, заново включал её, и уже потом запускал программу.

Для этого нам понадобится маленькая утилита от компании Microsoft — Devcon. Качаем её тут (77,2кб). Запускаем программу, указываем путь распаковки C:\Temp и жмём кнопку Unzip.

После распаковки нажимаем «Ок», закрываем программу и из папки C:\Temp\i386 копируем файл devcon.exe в папку C:\Windows\system32\. Если у вас Windows 64-х битный, то Вам нужно взять файл из папки C:\Temp\ia64.

Все, утилиту подготовили, теперь можно приступать к написанию bat файла. Создадим текстовый файл и переименуем  его  в Run_DVB_Dream.bat (в конце обязательно должно быть расширение bat, не txt!). Вы можете назвать его по другому, как угодно. Далее правой копной по этому файлу, выбрать «Изменить». Впишем следующие строки:

Где:

  1. devcon disable «PCI\VEN_1969&DEV_1083&SUBSYS_E0001458&REV_C0»  — Отключение устройства с заданным ID.
  2. devcon enable «PCI\VEN_1969&DEV_1083&SUBSYS_E0001458&REV_C0» — Включение устройства с заданным ID.
  3. start dvbdream.exe — Запуск программы просмотра ТВ (Вы прописываете путь к нужной Вам программе или не пишите эту строку совсем).

 

Что бы узнать ID заходим в Диспетчер устройств, открываете свойства нужного Вам устройства, переходите во вкладку Сведения, в выпадающем списке выбираете ИД оборудования и копируете первую строку. Если bat файл лежит не в папке с программой, тогда путь пишется в таком формате C:\dvbdream\dvbdream.exe.

Теперь мы можем создать ярлык батника на рабочем столе, сменить его имя к примеру на «Спутниковое ТВ», и сменить иконку на более красивую (Для смены значка правый клик по ярлыку->Свойства и нажать кнопку «Сменить значок»). При запуске ярлыка у нас сначала перезапуститься устройство, а потом уже включится программа:)

VN:F [1.9.20_1166]
Пожалуйста оцените статью, мне очень важно Ваше мнение!
Rating: 9.3/10 (41 votes cast)
Включение/Отключение устройства из командной строки (CMD), 9.3 out of 10 based on 41 ratings
Поделиться ссылкой с друзьями:

Comments

  1. Огромное спасибо! Искал весь вечер как включать и выключать устройство батником, не заходя в диспетчер. Теперь батник для моих целей, запускается автоматически с помощью стандартного планировщика!

    1. огромное спасибо Вам! весь интернет прошарил, ничего на 64 бит не подходила. Ваша ссылка помогла.

  2. а можно сделать ярлык если устройство включено отключить если отключено включить

  3. На планшете не систематизировано, при переходе в сон отключался сенсорный экран, приходилось перезапускать с помощью стилуса в диспетчере устройств.
    Решил написать программу,с ярлыком на рабочем столе для перезапуска, но т.к не программист, начал с азов программирования и пользование командной строкой. Много чего интересного подчерпнул, но цели не добился, т.к devcon в чистом виде не смог найти в интернете, пока не наткнулся на Вашу статью.
    Всё просто супер, спасибо огромное, помогло, положительных эмоций много:))

    1. павел, эта утилита только для упраления устройствами. Для управления программами можно использовать втроенные команды.
      Запустить — start firefox.exe
      Закрыть — taskkill /f /im firefox.exe

    1. ih, у данной утилиты есть параметр «status», можно его использовать для того что бы узнать в каком состоянии устройство и на основе этого условием(if) влючать или выключать его.
      Для примера: devcon status «PCI\VEN_115D&DEV_0003&SUBSYS_0181115D»

  4. Напишите пожалуйста полностью. Как это будет выглядеть с If ? Я в этом плохо разбираюсь. Очень надо. Заранее благодарю.

    1. Использую такой cmd-файл:
      devcon.exe status «нашID» |find «running» &&(devcon.exe disable «нашID» & exit /B)
      devcon.exe enable «нашID»
      Т.е. результат выполнения команды devcon status, содержащий текущий статус устройства, будет направлен команде find. Если она найдёт слово «running» (а devcon напишет или running, или disabled), то завершится без ошибки, устройство будет отключено и сценарий завершён. Иначе выполняется команда включения устройства.

      1. Спасибо за ответ. Но моя задача немного сложнее. При загрузке системы, устройство чаще всего не запускается.
        Вот, что выдаёт:

        C:\Windows\system32>devcon64 status «@USB\VID_0079*PID_0007\5&326C0CBC&0&10»
        USB\VID_0079&PID_0007\5&326C0CBC&0&10
        Name: USB- Device has a problem: 10.
        1 matching device(s) found.

        Если сделать рестарт устройства 1-3 раза, через команду devcon64 restatrt, оно запускается и работает нормально.Пишет:
        Driver is running.

        ЗАДАЧА: Как сделать, чтобы при запуске батника:
        1.Проверка статуса устройства, если оно запущено нормально (Driver is running.), то ничего не делать.
        2. Если не запустилось (Device has a problem: 10.), то devcon64 restatrt. Причём команда повторялась бы до тех пор, пока устройство не запуститься, то есть в статусе будет — Driver is running. Знаю, что нужно использовать if,findstr, for, но как это реализовать — не знаю.
        Обновление драйверов не предлагать. Устройство устаревшее, и чего я только не перепробовал, и не только я — всё бесполезно.

        Буду очень признателен за любую помощь. Заранее благодарю за ответ.

        1. Попробуем так:
          :rest
          devcon.exe status «HID\VID_0457&PID_1028&*» |find «running» ||(devcon.exe restart «HID\VID_0457&PID_1028&*» & goto rest)

  5. Подскажите, пожалуйста, какие следы оставляет использование devcon на удаленном компьютере? Реестр, журналы и тд. Спасибо.

  6. А если на сервере имеется два одинаковых сетевых адаптера, которые агрегированы (LACP) один из которых капризничает, нужно его перезапустить не трогая второй а ID у них одинаковый?

    1. SalaVila, если ID у них одинаковый, то скорее всего эти адаптеры являются одним устройством. Как Вы сейчас решаете проблему? К примеру вручную перезапускаете в диспетчере утройств или может быть в сетевых подключениях перевключаете адаптер?
      Если через сетевые подключения, можно попробовать следующий вариант:
      netsh interface set interface name=»Подключение по локальной сети» admin=DISABLED
      netsh interface set interface name=»Подключение по локальной сети» admin=ENABLED

  7. А у меня не видит устройство

    C:\Users\admin\Desktop>C:\Windows\System32\devconx64.exe disable «HID\VID_258A&PID_1205&REV_0100&MI_01&Col01»
    HID\VID_258A&PID_1205&MI_01&COL01\7&1154B406&0&0000 : Disable failed
    No matching devices found.

    Вроде всё правильно указал

    1. причём если сделать enable, то всё нормально отрабатывает
      Понять не могу в чём может быть дело

        1. Аналогичная ситуация: enable норм находит, а при disable говорит, что не находит. Как же быть? Как быть? Ребята, подскажите!

          1. vanushkin, Привет. Последнее что мы выяснили с Drimoos у него был файл в неправильной кодировке, цитирую:

            «Меня тоже смутили иероглифы в окне CMD. Во всем виновата кодировка. Должна быть UTF без ВОМ. Все заработало!!!. И великолепно!. Буду дальше экспериментировать с другими устройствами и их ID.»

            И вот содержимое bat файла триггера который я написал для включения/выключения устройства при его запуске. Цитирую:
            ———————————————————
            Вот код который проверил лично, у меня все работает

            ~~~
            set ID=»USB\VID_093A&PID_2700&REV_0100&MI_00″
            set DEVDIR=»C:\Windows\system32″

            %DEVDIR%\devcon.exe status %ID% | find «running» && (%DEVDIR%\devcon.exe disable %ID% & exit /B)
            %DEVDIR%\devcon.exe enable %ID%
            ~~~

            Вместо ID пишешь свое устройство
            В DEVDIR пишешь путь к своему devcon.exe без слеша в конце.
            Остальное не трогаешь.
            ———————————————————
            ID и DEVDIR нужно указывать только в двух первых сроках.

  8. А как можно остановить только определенное устройство из списка одинаковых, например выдает:
    ………………………
    USB\VID_04B9&PID_1000\7&33568E1&0&4 : Rainbow iKey 1000
    USB\VID_04B9&PID_1000\8&268B7691&0&2 : Rainbow iKey 1000
    ………………………

  9. Спасибо, полезно!
    У меня наушники (USB) при старте системы перестали заводиться. Тоже хотелось автоматизировать процесс их переподключения.
    Но вот если пытаться нормально работающие отключать такой командой — отписывается что готов это сделать, но просит перезагрузки. А вот если устройство в ошибке, то все норм срабатывает. Так что добавил проверку, что устройство не работает, только тогда переподключать. Вот код bat файла, может кому пригодится.

    @echo off
    set ID=»USB\VID_0D8C&PID_013C&REV_0100&MI_00″
    set DEVDIR=»C:\Windows\system32″

    %DEVDIR%\devcon.exe status %ID% | find «running»
    IF NOT errorlevel 1 (echo Headset is OK & goto END)
    echo Trying to reset the Headset
    devcon disable %ID%
    devcon enable %ID%

    :END

  10. Спасибо за наводку.
    Новости по теме: на суперюзере https://superuser.com/questions/1002950/quick-method-to-install-devcon-exe в последних комментах темы есть ссылка на девкон инсталлер, выложенный на гитхабе. https://github.com/Drawbackz/DevCon-Installer
    Работает на 22H2, нужно всего лишь обновить онлайн кнопкой, в списке доступных ОС появляется требуемая версия.
    Сейчас займусь своей проблемой.

Добавить комментарий для Danielnar Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *