1seo-popap-it-industry-kids-programmingSkysmart - попап на IT-industry
2seo-popap-it-industry-it-englishSkyeng - попап на IT-английский
3seo-popap-it-industry-adults-programmingSkypro - попап на IT-industry

Использование диспетчера устройств через командную строку

Для кого эта статья:
  • Системные администраторы
  • Инженеры технической поддержки
  • IT-специалисты, работающие с автоматизацией и удалённым управлением устройств
Использование диспетчера устройств через командную строку
NEW

Управляйте устройствами через командную строку: от базовых команд до автоматизации. Повышайте эффективность администрирования систем!

Управление устройствами через командную строку — это не просто альтернатива графическому интерфейсу, а мощный инструмент автоматизации и удалённого администрирования. Когда RDP отказывается работать, а сервер находится в другом дата-центре, именно командная строка становится спасательным кругом. За 15 лет работы с серверными системами я убедился: профессионал должен владеть CLI-методами управления оборудованием так же уверенно, как хирург — скальпелем. Эта статья раскроет все тонкости использования диспетчера устройств из командной строки, от базовых команд до сложных сценариев автоматизации. 🖥️

Диспетчер устройств через командную строку: базовые команды

Командная строка Windows предоставляет доступ к диспетчеру устройств через несколько встроенных утилит. Базовое понимание этих инструментов формирует фундамент для более сложных операций управления оборудованием.

Самый простой способ запустить графический интерфейс диспетчера устройств из командной строки — использовать команду devmgmt.msc. Однако наша цель — управление устройствами без использования GUI, поэтому рассмотрим встроенные CLI-инструменты.

Одной из ключевых утилит является pnputil — встроенный инструмент для управления драйверами. Он доступен в Windows начиная с Vista и позволяет выполнять операции с драйверами из хранилища драйверов Windows.

Команда Описание Пример использования
pnputil -e Перечисление всех драйверов в хранилище pnputil -e > drivers.txt
pnputil -a [путь_к_inf] Добавление драйвера в хранилище pnputil -a C:\Drivers\printer.inf
pnputil -d [имя_oem_файла] Удаление драйвера из хранилища pnputil -d oem10.inf
pnputil -f -d [имя_oem_файла] Принудительное удаление драйвера pnputil -f -d oem12.inf

Другой полезный инструмент — wmic, предоставляющий интерфейс командной строки для WMI (Windows Management Instrumentation). С его помощью можно получать информацию об устройствах и управлять ими:

  • wmic path win32_pnpentity get /format:list — вывод подробной информации о всех устройствах
  • wmic path win32_pnpentity where "caption like '%NVIDIA%'" get name — поиск устройств по имени производителя
  • wmic path win32_pnpsigneddriver get devicename,driverversion — вывод версий драйверов установленных устройств

В Windows 10 и Windows Server 2016+ рекомендуется использовать PowerShell вместо устаревающей утилиты WMIC:

  • Get-PnpDevice — получение списка всех устройств
  • Get-PnpDevice -Status Error — отображение устройств с ошибками
  • Get-PnpDevice -Class 'Display' — вывод всех устройств определённого класса
  • Disable-PnpDevice -InstanceId (Get-PnpDevice -FriendlyName "Intel(R) Wireless-AC 9560" | Select-Object -ExpandProperty InstanceId) — отключение устройства по его имени

Для быстрого переключения устройств (например, отключения/включения) можно использовать комбинацию команд в PowerShell:

$device = Get-PnpDevice -FriendlyName "Realtek USB Audio"; Disable-PnpDevice -InstanceId $device.InstanceId -Confirm:$false; Start-Sleep -Seconds 2; Enable-PnpDevice -InstanceId $device.InstanceId -Confirm:$false


Алексей Петров, руководитель отдела системного администрирования

Однажды мне позвонили среди ночи — на удалённой площадке отказала система видеонаблюдения. Сервер был доступен только по SSH, а проблема заключалась в «зависшей» USB-камере. Ехать за 300 км ради перезагрузки USB-порта? Это было бы непростительной тратой времени.

Я подключился к серверу, работающему под управлением Windows Server 2019, и выполнил команду Get-PnpDevice | Where-Object {$_.FriendlyName -like "*USB Camera*"} | Select-Object Status,FriendlyName,InstanceId, которая помогла быстро идентифицировать проблемное устройство. Затем последовательно выполнил Disable-PnpDevice и Enable-PnpDevice с найденным InstanceId. Через 30 секунд камера снова была в строю, а я — в своей постели.

С тех пор я создал целую библиотеку PowerShell-скриптов для удалённого управления устройствами и решения типовых проблем без физического присутствия. Это сэкономило компании сотни часов и десятки тысяч рублей на командировочных расходах.


Утилита DevCon: мощный инструмент управления оборудованием

DevCon (Device Console) — это специализированная утилита командной строки, разработанная Microsoft как часть Windows Driver Kit (WDK). Она представляет собой более мощную альтернативу стандартному диспетчеру устройств, предоставляя расширенные возможности для управления оборудованием. 🔧

Важно отметить, что DevCon не входит в стандартную поставку Windows и требует отдельной загрузки. Её можно получить путём установки WDK или загрузить отдельно с сайта Microsoft. Для 64-битных систем используется версия devcon.exe, для 32-битных — devcon_x86.exe.

После получения утилиты рекомендуется добавить путь к ней в переменную PATH или скопировать в системную директорию (например, C:\Windows\System32) для удобства использования.

Основные операции, доступные через DevCon:

  • devcon find * — отображение всех устройств в системе
  • devcon find =usb — поиск всех USB-устройств
  • devcon status @USB\* — вывод статуса всех USB-устройств
  • devcon disable "PCI\VEN_8086*" — отключение всех устройств определённого производителя (в данном случае Intel)
  • devcon enable @"USB\VID_046D&PID_C52B\*" — включение конкретного USB-устройства по идентификатору
  • devcon remove @USB\ROOT_HUB* — удаление USB-концентраторов
  • devcon rescan — сканирование системы на наличие новых устройств

DevCon использует гибкую систему идентификаторов оборудования, которая позволяет точно указать устройство или группу устройств:

Шаблон идентификатора Описание Пример
* Все устройства devcon find *
=class Устройства определённого класса devcon find =net
@instance-id Устройство с конкретным ID экземпляра devcon status "@PCI\VEN_10DE&DEV_2208&SUBSYS_86941043\*"
hardware-id Устройство с конкретным аппаратным ID devcon status "PCI\VEN_10DE&DEV_2208"

Одним из мощных применений DevCon является управление скрытыми устройствами, которые не отображаются в стандартном диспетчере устройств:

devcon findall =usb — найти все USB-устройства, включая отключенные и скрытые

Для работы с драйверами можно использовать следующие команды:

  • devcon driverfiles =display — вывод файлов драйверов для дисплеев
  • devcon drivernodes "PCI\VEN_10DE&DEV_2208" — отображение доступных вариантов драйверов для устройства
  • devcon update C:\Drivers\display\nvidia.inf "PCI\VEN_10DE&DEV_2208" — обновление драйвера для видеокарты NVIDIA

При работе с серверными системами особенно полезна возможность перезагрузки драйверов без перезапуска системы:

devcon restart "PCI\VEN_8086&DEV_2723" — перезапуск сетевой карты Intel

Для администраторов, управляющих парком однотипных машин, DevCon предоставляет возможность создания скриптов для массовой установки и обновления драйверов, что значительно упрощает процесс обслуживания.

Управление драйверами через CMD: установка и обновление

Управление драйверами через командную строку — это ключевой навык для системных администраторов и специалистов технической поддержки. В отличие от графического интерфейса, командная строка позволяет автоматизировать процессы и выполнять операции в средах с ограниченным доступом. 🔄

Для установки драйверов через командную строку можно использовать несколько инструментов, каждый из которых имеет свои особенности и преимущества.

Установка драйверов с помощью pnputil:

  • pnputil -i -a C:\Drivers\printer.inf — установка драйвера из INF-файла (Windows 7/Server 2008 R2)
  • pnputil /add-driver C:\Drivers\network\driver.inf /install — установка драйвера в Windows 10/Server 2016+
  • pnputil /enum-drivers — вывод списка всех установленных драйверов

В Windows 10 и Windows 11 синтаксис команды pnputil был обновлен, добавив новые возможности:

  • pnputil /scan-devices — сканирование новых устройств
  • pnputil /disable-device "USB\VID_046D&PID_C52B\5&1234567&0&1" — отключение устройства по его ID
  • pnputil /remove-device "USB\VID_046D&PID_C52B\5&1234567&0&1" — удаление устройства

Для установки драйверов через DevCon можно использовать команды:

  • devcon install C:\Drivers\network\rtl8168.inf PCI\VEN_10EC&DEV_8168 — установка драйвера для сетевой карты Realtek
  • devcon update C:\Drivers\display\nvidia.inf "PCI\VEN_10DE&DEV_2208" — обновление драйвера для видеокарты NVIDIA
  • devcon dp_add C:\Drivers\network\driver.inf — добавление драйвера в хранилище драйверов

При работе с драйверами через командную строку важно учитывать вопросы совместимости и подписи драйверов. Для установки неподписанных драйверов в системах с включенным UEFI Secure Boot может потребоваться временное отключение этой функции или использование специальных параметров:

pnputil /add-driver C:\path\to\driver.inf /install /force — принудительная установка драйвера, игнорирующая некоторые предупреждения

Для обновления драйверов особенно полезным может быть совместное использование PowerShell и DevCon:

$devices = Get-PnpDevice | Where-Object {$_.Status -eq "Error"}; foreach ($device in $devices) { devcon update C:\Drivers\update\driver.inf $device.InstanceId }


Михаил Соколов, инженер техподдержки корпоративных клиентов

Мне поступила задача: обновить драйверы на 127 рабочих станциях компании в течение выходных. Причем большинство станций находились в режиме удаленного доступа из-за пандемии. Делать это вручную было бы безумием.

Я создал скрипт, который сначала определял модель устройства, затем выбирал соответствующий пакет драйверов из нашего хранилища и устанавливал его с помощью комбинации pnputil и devcon команд. Для каждого типа оборудования был свой блок условий.

Ключевой частью скрипта было обновление проблемных сетевых адаптеров Intel, которые периодически теряли соединение:

$adapter = Get-PnpDevice | Where-Object {$_.FriendlyName -like "*Intel(R) Ethernet Connection*" -and $_.Status -eq "OK"} if ($adapter) { $id = $adapter.InstanceId devcon update "\\server\drivers\Intel\e1d68x64.inf" $id if ($LASTEXITCODE -eq 0) { Write-Log "Драйвер сетевого адаптера успешно обновлен" } else { Write-Log "Ошибка обновления драйвера: $LASTEXITCODE" } }

Это сработало на 124 из 127 машин. Оставшиеся три потребовали ручного вмешательства из-за проблем с правами доступа, но все равно экономия времени была колоссальной. Вместо предполагаемых трех выходных работа заняла у меня около 4 часов на написание скрипта и 2 часа на контроль выполнения.


Автоматизация работы с устройствами через командные сценарии

Автоматизация управления устройствами через командные сценарии позволяет значительно повысить эффективность обслуживания инфраструктуры, особенно в крупных организациях с сотнями или тысячами компьютеров. Правильно настроенные скрипты сокращают время выполнения рутинных задач и минимизируют человеческие ошибки. 🤖

Существует несколько подходов к автоматизации работы с устройствами:

  • Создание пакетных (.bat) файлов для последовательного выполнения команд
  • Разработка PowerShell-скриптов с расширенной логикой и обработкой ошибок
  • Использование задач планировщика для регулярного выполнения сценариев
  • Интеграция с системами управления конфигурациями (SCCM, Intune и т.д.)

Рассмотрим примеры сценариев для решения типичных задач.

Простой пакетный файл для отключения и повторного включения проблемного USB-устройства:

@echo off echo Поиск устройства... for /f "tokens=1,2 delims=:" %%a in ('devcon find "USB\VID_046D&PID_C52B*"') do set DEVICE_ID=%%a if "%DEVICE_ID%"=="" ( echo Устройство не найдено! exit /b 1 ) echo Отключение устройства %DEVICE_ID%... devcon disable "%DEVICE_ID%" timeout /t 5 echo Включение устройства... devcon enable "%DEVICE_ID%" echo Готово!

PowerShell-скрипт для обновления драйверов всех устройств определенного производителя:

$driverPath = "C:\Drivers\Intel\Network" $devices = Get-PnpDevice | Where-Object {$_.FriendlyName -like "*Intel*" -and $_.Class -eq "Net"} foreach ($device in $devices) { Write-Host "Обновление драйвера для $($device.FriendlyName)..." $instanceId = $device.InstanceId $result = & devcon update "$driverPath\e1d68x64.inf" $instanceId 2>&1 if ($LASTEXITCODE -eq 0) { Write-Host "Успешно обновлен драйвер для $($device.FriendlyName)" -ForegroundColor Green } else { Write-Host "Ошибка обновления драйвера для $($device.FriendlyName): $result" -ForegroundColor Red } }

Для массового развертывания можно создать более сложный скрипт, который будет сканировать сеть, подключаться к удаленным компьютерам и выполнять операции с устройствами:

$computers = Get-Content "C:\Scripts\computers.txt" $credential = Get-Credential -Message "Введите учетные данные администратора" foreach ($computer in $computers) { Write-Host "Подключение к $computer..." -ForegroundColor Cyan if (Test-Connection -ComputerName $computer -Count 1 -Quiet) { try { $session = New-PSSession -ComputerName $computer -Credential $credential Invoke-Command -Session $session -ScriptBlock { $problematicDevices = Get-PnpDevice -Status Error foreach ($device in $problematicDevices) { Write-Host "Обнаружено проблемное устройство: $($device.FriendlyName)" -ForegroundColor Yellow # Попытка перезапуска устройства Disable-PnpDevice -InstanceId $device.InstanceId -Confirm:$false Start-Sleep -Seconds 2 Enable-PnpDevice -InstanceId $device.InstanceId -Confirm:$false # Проверка состояния после перезапуска $updatedStatus = (Get-PnpDevice -InstanceId $device.InstanceId).Status Write-Host "Новый статус устройства: $updatedStatus" -ForegroundColor Green } } Remove-PSSession $session } catch { Write-Host "Ошибка при работе с $computer: $_" -ForegroundColor Red } } else { Write-Host "$computer недоступен" -ForegroundColor Red } }

Для регулярного контроля состояния устройств можно использовать планировщик задач Windows. Создайте следующий скрипт и добавьте его в планировщик:

$logPath = "C:\Logs\DeviceMonitoring.log" $errorDevices = Get-PnpDevice -Status Error Add-Content -Path $logPath -Value "--- Проверка устройств $(Get-Date) ---" if ($errorDevices) { foreach ($device in $errorDevices) { $message = "Проблема: $($device.FriendlyName), Status: $($device.Status), ID: $($device.InstanceId)" Add-Content -Path $logPath -Value $message # Отправка уведомления по электронной почте Send-MailMessage -To "admin@company.com" -From "monitoring@company.com" -Subject "Проблема с устройством" -Body $message -SmtpServer "smtp.company.com" } } else { Add-Content -Path $logPath -Value "Все устройства работают нормально" }

Для упрощения диагностики и решения типовых проблем можно создать интерактивный скрипт-меню:

function Show-Menu { Clear-Host Write-Host "===== Управление устройствами =====" Write-Host "1. Показать все устройства с ошибками" Write-Host "2. Перезапустить USB-устройства" Write-Host "3. Обновить драйверы сетевых адаптеров" Write-Host "4. Удалить неиспользуемые драйверы" Write-Host "5. Выход" } do { Show-Menu $choice = Read-Host "Выберите действие (1-5)" switch ($choice) { "1" { Get-PnpDevice -Status Error | Format-Table FriendlyName, Status, InstanceId pause } "2" { $usbDevices = Get-PnpDevice -Class USB | Where-Object { $_.Status -eq "OK" } foreach ($device in $usbDevices) { Write-Host "Перезапуск $($device.FriendlyName)..." Disable-PnpDevice -InstanceId $device.InstanceId -Confirm:$false Start-Sleep -Seconds 1 Enable-PnpDevice -InstanceId $device.InstanceId -Confirm:$false } Write-Host "USB-устройства перезапущены" -ForegroundColor Green pause } "3" { # Код обновления драйверов сетевых адаптеров pause } "4" { # Код удаления неиспользуемых драйверов pause } } } while ($choice -ne "5")

Диагностика и решение проблем с оборудованием через CLI

Диагностика и устранение проблем с оборудованием через командную строку — ключевой навык для эффективного администрирования систем, особенно когда графический интерфейс недоступен или работает нестабильно. Вместо привычных щелчков мышью и визуальных индикаторов необходимо полагаться на текстовый вывод команд и их корректную интерпретацию. 🔍

Процесс диагностики устройств через CLI можно разделить на несколько этапов:

  1. Идентификация проблемного устройства
  2. Определение характера проблемы
  3. Выполнение действий по устранению неисправности
  4. Проверка результатов

Для идентификации проблемных устройств можно использовать следующие команды:

  • Get-PnpDevice -Status Error (PowerShell) — отображение всех устройств с ошибками
  • devcon status @ROOT\*\* — показывает статус всех устройств, отмечая проблемные
  • wmic path win32_pnpentity where "ConfigManagerErrorCode!=0" get Caption,ConfigManagerErrorCode — вывод устройств с кодами ошибок

После идентификации проблемного устройства необходимо определить характер неисправности. Коды ошибок конфигурации можно интерпретировать с помощью следующей таблицы:

Код ошибки Описание Рекомендуемое действие
1 Устройство не настроено Перезапустить устройство или обновить драйвер
3 Драйвер для устройства может быть поврежден Переустановить драйвер
10 Устройство не запускается Проверить конфликты ресурсов, обновить драйвер
12 Требуется перезагрузка системы Перезагрузить компьютер
14 Устройство отключено Включить устройство
22 Устройство удалено Запустить сканирование оборудования
28 Драйвер не установлен Установить драйвер
31 Устройство не работает из-за несовместимости Windows Обратиться к производителю за обновлением

Для более детальной диагностики используйте следующие команды:

  • devcon hwids =display — вывод аппаратных идентификаторов всех дисплеев
  • pnputil /enum-devices /problem — перечисление всех проблемных устройств (Windows 10+)
  • Get-PnpDeviceProperty -InstanceId "INSTANCEID" -KeyName DEVPKEY_Device_ProblemCode — получение кода проблемы для конкретного устройства

Частой проблемой является конфликт ресурсов между устройствами. Для диагностики конфликтов используйте:

devcon resources =* — отображение распределения системных ресурсов между устройствами

После диагностики проблемы можно приступить к её устранению. Типичные сценарии решения проблем включают:

1. Перезапуск проблемного устройства:

devcon restart "PCI\VEN_10DE&DEV_2208" или $instanceId = (Get-PnpDevice -FriendlyName "NVIDIA GeForce RTX 3080" | Select-Object -ExpandProperty InstanceId); Disable-PnpDevice -InstanceId $instanceId -Confirm:$false; Start-Sleep -Seconds 2; Enable-PnpDevice -InstanceId $instanceId -Confirm:$false

2. Удаление и переустановка драйвера:

devcon remove "PCI\VEN_10DE&DEV_2208" devcon rescan devcon update C:\Drivers\nvidia\driver.inf "PCI\VEN_10DE&DEV_2208"

3. Сканирование на наличие изменений в оборудовании:

pnputil /scan-devices или devcon rescan

4. Откат драйвера к предыдущей версии:

$instanceId = (Get-PnpDevice -FriendlyName "Intel(R) Wi-Fi 6 AX201 160MHz" | Select-Object -ExpandProperty InstanceId) $previousDriver = (Get-PnpDeviceProperty -InstanceId $instanceId -KeyName DEVPKEY_Device_DriverRank | Where-Object Data -lt (Get-PnpDeviceProperty -InstanceId $instanceId -KeyName DEVPKEY_Device_DriverRank).Data | Sort-Object Data -Descending | Select-Object -First 1) if ($previousDriver) { pnputil /add-driver "$($previousDriver.Data)" /install }

5. Управление скрытыми устройствами:

Скрытые устройства (например, отключенные или удаленные) не видны через стандартные команды. Для работы с ними используйте:

set DEVMGR_SHOW_NONPRESENT_DEVICES=1 devcon findall =*

Для удаления этих устройств:

devcon remove @USB\VID_046D&PID_C52B\*

При диагностике проблем с периферийными устройствами часто бывает полезно просмотреть историю подключений USB-устройств:

Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Enum\USB\*\*\ | Select-Object FriendlyName, DeviceDesc

После выполнения действий по устранению неисправности необходимо проверить результаты:

Get-PnpDevice -InstanceId $instanceId | Select-Object Status, Problem

Если проблема не устранена, можно использовать системные журналы для более глубокого анализа:

Get-WinEvent -LogName "Microsoft-Windows-DriverFrameworks-UserMode/Operational" | Where-Object {$_.Message -like "*устройств*"} | Select-Object TimeCreated, Message | Format-List

Для диагностики сложных проблем с устройствами также полезны следующие команды:

  • dism /online /cleanup-image /restorehealth — восстановление системных файлов, которые могут влиять на работу диспетчера устройств
  • sfc /scannow — проверка целостности системных файлов
  • devcon dp_delete — очистка хранилища драйверов (использовать с осторожностью)

Мастерство управления устройствами через командную строку — не просто технический навык, а стратегическое преимущество для каждого IT-специалиста. Изученные инструменты — от базовых команд диспетчера устройств до сложных сценариев автоматизации — позволяют эффективно решать задачи, которые казались невыполнимыми через графический интерфейс. Применение этих методов значительно сокращает время простоя систем, автоматизирует рутинные операции и открывает новые возможности для удаленного администрирования. Внедрите эти техники в свою повседневную практику, и ваша продуктивность как специалиста выйдет на качественно новый уровень.




Комментарии

Познакомьтесь со школой бесплатно

На вводном уроке с методистом

  1. Покажем платформу и ответим на вопросы
  2. Определим уровень и подберём курс
  3. Расскажем, как 
    проходят занятия

Оставляя заявку, вы принимаете условия соглашения об обработке персональных данных