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

Эта программа присутствует в системе начиная с Vista и не требует ничего устанавливать. За незаметным именем скрывается полноценный пульт управления всем, что связано с драйверами и устройствами. Один человек за командной строкой делает с её помощью то, на что в графическом интерфейсе ушли бы часы, особенно когда машин много и операции повторяются. Разобравшись в наборе команд, перестаёшь зависеть от мыши и графики, а заодно получаешь инструмент, который одинаково работает и в живой системе, и в среде восстановления.

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

Прежде чем командовать, стоит понять, с чем имеешь дело. Файл pnputil.exe лежит в системном каталоге Windows вместе с прочими служебными утилитами и доступен из любой командной строки без указания пути. Скачивать, устанавливать, искать его не нужно, он уже на месте в любой современной версии системы.

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

Синтаксис у всех команд единый и предсказуемый. После имени утилиты идёт основная команда с косой чертой впереди, а за ней при необходимости параметры, тоже с косой чертой. Чтобы увидеть полный список доступных команд прямо в системе, достаточно вызвать встроенную справку, которая перечисляет всё, что умеет конкретная версия утилиты:

pnputil /?

Набор команд слегка отличается между версиями Windows. Базовые операции с драйверами доступны давно, а управление отдельными устройствами, фильтры и форматы вывода добавлялись в более поздних сборках. Справка показывает ровно то, что поддерживает текущая система, и снимает догадки о доступности конкретного ключа. Например, команды отключения и перезапуска устройств появились заметно позже базовых операций с пакетами, а фильтрация перечисления по классу и вывод в готовый формат отчёта относятся к ещё более свежим версиям. Если команда из инструкции не срабатывает, первым делом сверяются со справкой своей системы, а не ищут ошибку в синтаксисе.

Перечисление и осмотр установленных драйверов

Работа с драйверами обычно начинается с осмотра, ведь прежде чем что-то менять, надо понять, что уже есть. Главная команда инвентаризации перечисляет все сторонние пакеты драйверов в хранилище, те самые, что добавлены поверх системных от производителей оборудования:

pnputil /enum-drivers

В выводе каждый пакет получает строку с присвоенным именем вида oemN.inf, исходным именем INF-файла, поставщиком, классом устройства, версией и датой. Имя oemN.inf это внутренний ярлык, под которым система знает пакет, и именно его указывают в командах удаления и выборочного экспорта. Цифра в имени присваивается по порядку добавления, так что по ней не угадать назначение драйвера, для этого смотрят на поставщика и класс.

Когда нужно видеть не только пакеты, но и входящие в них файлы, добавляют отдельный ключ, разворачивающий каждый пакет до списка составляющих:

pnputil /enum-drivers /files

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

Добавление, установка и обновление драйверов

Сердце утилиты это операции с самими драйверами. Добавление пакета в хранилище и установка его на устройство выполняются одной командой, если задать нужные ключи. Базовый сценарий установки указывает на INF-файл и просит сразу поставить драйвер на подходящее оборудование:

pnputil /add-driver C:\Drivers\device.inf /install

Ключ install здесь принципиален. Без него пакет лишь ляжет в хранилище про запас, но на устройство не встанет, и оборудование останется без драйвера при полной полке. Когда нужно залить не один файл, а целую папку с россыпью драйверов, например резервную копию, подключают обход вложенных каталогов и маску по всем INF-файлам:

pnputil /add-driver C:\Drivers\*.inf /subdirs /install

Ключ subdirs заставляет утилиту обойти все подпапки в поисках INF-файлов, а install ставит каждый подходящий драйвер на своё устройство. Эта команда незаменима при восстановлении драйверов после переустановки системы, когда нужно разом поднять десятки устройств. Стоит помнить про внутренний рейтинг: если на устройстве уже стоит драйвер с более высоким рангом, утилита не станет насильно перебивать его пакетом из команды. Это защищает от случайного отката на устаревшую версию.

Удаление драйверов и очистка хранилища от старых версий

Со временем хранилище драйверов разрастается. Каждое обновление видеодрайвера или чипсета оставляет в нём предыдущую версию, и накапливаются гигабайты неактуальных пакетов. Утилита позволяет навести порядок, удалив конкретный драйвер по его имени oemN.inf, которое берут из вывода перечисления:

pnputil /delete-driver oem15.inf

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

pnputil /delete-driver oem15.inf /uninstall /force

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

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

Управление состоянием устройств без графического интерфейса

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

pnputil /disable-device "ACPI\SYNA2BA6\3&C8C3232&0"
pnputil /enable-device "ACPI\SYNA2BA6\3&C8C3232&0"

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

pnputil /restart-device "PCI\VEN_10DE&DEV_2208\3&11583659&0&10"

Отдельно стоит команда сканирования, которая повторяет загрузочный опрос шин и заставляет систему заметить только что подключённое оборудование без перезагрузки. После неё новое устройство проявляется в списках, и с ним можно работать дальше. Перечисление устройств с фильтром по проблемам быстро показывает всё, у чего выставлен код неисправности, и служит отправной точкой диагностики:

pnputil /enum-devices /problem

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

Работа с драйверами в офлайн-образе и среде восстановления

Отдельная грань утилиты раскрывается, когда система не запущена, а лежит перед администратором набором файлов. Подготовка эталонного образа, интеграция драйверов в дистрибутив, спасение незагружающейся системы, все эти задачи требуют работы с драйверами вне живой Windows. Здесь pnputil делит обязанности с родственным инструментом DISM, и важно понимать, кто за что отвечает.

В живой запущенной системе драйверы устанавливает именно pnputil, это его территория. Команда добавления с установкой работает только онлайн, на текущей системе. А вот заливка драйверов в офлайн-образ, то есть в смонтированный или подключённый раздел неработающей системы, лежит на DISM. Эта граница неочевидна и стоила многим часов попыток заставить один инструмент делать чужую работу. Запомнив разделение, человек сразу берётся за нужную утилиту.

Типичный спасательный сценарий выглядит так. Система не грузится из-за нехватки драйвера дискового контроллера после переноса на новое железо. Её раздел подключают к исправной машине или загружаются в среду восстановления, где он виден под своей буквой. Затем драйверы из резервной копии добавляют в этот раздел средствами DISM с обходом подпапок, после чего система получает шанс стартовать штатно. Сам pnputil в среде восстановления тоже доступен и помогает осмотреться, перечислить устройства и драйверы, прежде чем что-то менять. Эта пара инструментов покрывает весь спектр ситуаций, от рутинной установки до реанимации системы, которая отказывается загружаться.

Почему командная строка обыгрывает мышь в работе с драйверами

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

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

Второе преимущество в доступности там, где графики нет вовсе. Среда восстановления, этап установки системы, удалённое подключение к серверу без рабочего стола, во всех этих ситуациях диспетчер устройств недоступен, а командная строка работает. Когда система не загружается из-за отсутствия драйвера контроллера диска, именно консольная утилита остаётся единственным способом вернуть всё на места. Освоив pnputil, человек получает инструмент, который не подведёт ни в обычной работе, ни в той ситуации, когда привычный графический интерфейс просто не запускается, а сделать нужно многое.