Как удалить драйвер windows 10 powershell

Несколько способов очистки Windows от неиспользуемых и старых версии драйверов

При установке или обновлении драйверов устройств в Windows, старые версии драйверов сохраняются в системе. Это позволяет пользователю откатиться к предыдущей версии драйвера, если новый драйвер работает нестабильно. Однако Windows автоматически не удаляет старые и неиспользуемые версии драйверов, поэтому со временем размер места, занимаемого драйверами на системном диске становится довольно большим. В этой статье мы рассмотрим несколько способов удаления старых версий драйверов (дубликатов) в Windows с помощью встроенных и сторонних средств.

Содержание:

  • Поиск и удаление старых версий драйверов в Windows с помощью PowerShell
  • Удаление старых драйверов в Windows с помощью утилиты очистки диска cleanmgr
  • Удаляем неиспользуемые драйвера с помощью DevManView

Windows хранит все файлы в драйверов в своем репозитории драйверов (Driver Store), находящемся в каталоге
%WINDIR%System32DriverStoreFileRepository.

Размер каталога с драйверами можно получить с помощью PowerShell (
"{0:N2} GB" -f ((gci –force $Env:windirSystem32DriverStoreFileRepository –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)
) или графических утилит. В моем случае на домашнем ноутбуке с Windows каталог FileRepository занимает на диске около 11 Гб и содержит >5000 файлов. В частности, в этом каталоге хранится более 20 различных версий видеодрайвера Nvidia.

Размер каталог DriverStore FileRepository в Windows

Важно!

  1. Не удаляйте файлы и каталоги драйверов из папки DriverStore вручную;
  2. Перед очисткой драйверов настоятельно рекомендуется создать точку восстановления системы (
    Checkpoint-Computer -Description "BeforeDriversDelete"
    ) или резервную копию образа системы;
  3. При подключении новых устройств вам придется загружать и устанавливать драйвера заново.

Поиск и удаление старых версий драйверов в Windows с помощью PowerShell

Рассмотрим способ поиска и удаления старых версий драйверов в Windows. Вы можете вывести полный список установленных драйверов с помощью PowerShell и WMI (CIM) класса Win32_PnPSignedDriver:

Get-WmiObject Win32_PnPSignedDriver| select DeviceName, DeviceClass,Manufacturer, DriverVersion, DriverDate,InfName|Out-GridView

В нашем примере мы получили таблицу Out-GridView со списком драйверов в репозитории Windows в формате: имя устройства, класс устройства, производитель, версия драйвера, дата установки, имя inf файла драйвера (oemXXX.inf).

получить полный список установленных драйверов в хранилище DriverStore Windows с помощью PowerShell

Вы можете получить список сторонних драйверов, установленных в Windows с помощью командлета:

Get-WindowsDriver –Online| select Driver, ClassName, BootCritical, ProviderName, Date, Version, OriginalFileName|Out-GridView

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

pnputil.exe /remove-device oemxxx.inf

Примечание. В некоторых случаях удалить драйвер можно только с ключом force (-f):
pnputil /remove-device oemxxx.inf /force

Найдите в таблице драйвера, для которых присутствуют несколько версий и удалите все старые версии драйвера (кроме самой последней) с помощью pnputil.

Будьте особо внимательными с драйверами, важными при загрузке Windows (
BootCritical=True
)

Также вы можете выгрузить список драйверов в текстовый файл и импортировать его в Excel:

dism /online /get-drivers /format:table > c:tmpdrivers.txt

Удалите все лишние данные в таблице и оставьте только столбцы: файл драйвера в системе (oemXXX.inf), имя оригинального inf файла, класс устройства, производителя, даты установки и версии драйвера. Отсортируйте таблицу по столбцам B (содержит имя оригинального inf файл) и столбцу F (дата установки драйвера). Среди групп одноименных драйверов отметьте для удаления все версии драйверов, кроме последней. В моем случае видно, что большинство старых версий драйверов принадлежит NVIDIA.

Для удобства сформируйте в пустом столбце команду для удаления каждого драйвера с помощью формулы
=CONCATENATE("pnputil.exe -d ";A21)

списки драйверов с версиями в ExcelОсталось скопировать команды pnputil и выполнить их командной строке или bat файле.

pnputil.exe d oemxxx.inf - удаление драйвера

В моем случае я удалил в Windows порядка 40 старых версий драйверов и освободил около 8 Гб места (в основном за счет драйверов видеокарты NVIDIA).

Для автоматического поиска драйверов устройств, для которых установлено несколько версий драйверов (дубликаты) можно использовать готовый PowerShell скрипт FindDriverDuplicates.ps1 (https://github.com/winadm/posh/blob/master/Desktop/FindDriverDuplicates.ps1).

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

powershell скрип для поиска/удаления дубликатов и старых версий драйверов в windows

Удаление старых драйверов в Windows с помощью утилиты очистки диска cleanmgr

В современных версиях Windows 10 и 11 вы можете использовать утилиту очистки диска
cleanmgr.exe

для удаления старых версий драйверов (эта же утилита позволяет удалить устаревшие обновления).

  1. Запустите утилиту «Очистка диска»: Win+R -> cleanmgr
  2. Выберите системный дискdisk cleanup: cleanmgr.exe
  3. Нажмите на кнопку Clean up system files Очистка системных файлов
  4. Отметьте в списке Device driver packages (Пакеты драйверов устройств)Удаление старых пакетов драйверов в Windows 10
  5. Нажмите ОК;
  6. Данное задание очистки удалит все предыдущие версии драйверов, установленные через Windows Update или вручную. В Windows останется только последняя версия для каждого из драйверов. При этом устройств кнопка “Откатить драйвер” (RollBack Driver) в свойствах драйвера в диспетчере устройств станет неактивной. после удаления старых версий драйверов нельзя откатиться на старую версию драйвера windows

    Задание очистки cleanmgr удаляет только дубликаты (версии) драйверов. Неиспользуемые драйверы устройств вам придется удалить вручную.

Удаляем неиспользуемые драйвера с помощью DevManView

Для просмотра списка установленных драйверов в Windows можно использовать небольшую бесплатную утилиту DevManView от NirSoft (https://www.nirsoft.net/utils/device_manager_view.html)

Утилита DevManView предоставляет собой альтернативу стандартному диспетчеру устройств Windows и позволяет представить список драйверов, установленных на компьютере, в виде плоского списка (таблицы).

  1. Скачайте и запустите утилиту DevManView;
  2. Включите следующие параметры в меню Options: Mark Connected Devices и Show Non Plug and Play Drivers;
  3. Отсортируйте таблицу по столбцу Connected. Это позволит понять какие устройства сейчас подключены, а какие нет;
  4. В целях стабильности рекомендуем сначала отключить выбранные драйвера (Disable Selected Devices –> F6) и только после перезагрузки удалять драйвера с помощью опции Uninstall Selected Devices.DevManView утилита для управления драйверами в driverstore

Вы тут: Главная Windows PowerShell: как в Windows 10 быстро выявить дубликаты драйверов и удалить их

На ПК одного из коллег возникла острая необходимость высвободить как можно больше пространства на диске. Стандартные средства очистки и ручное удаление ненужного лишь незначительно улучшили ситуацию.

Я заинтересовался вопросом и применил свое руководство на практике. Помимо прочего мое внимание привлекло хранилище драйверов, занимающее 4GB. Сегодня я покажу, как автоматизировать анализ и очистку хранилища.

[+] Сегодня в программе

Общие сведения

Сначала немного теории в формате «вопрос – ответ».

Как образуются дубликаты драйверов

Хранилище драйверов находится в папке C:WindowsSystem32DriverStore. Когда система определяет устройство, она пытается установить для него подходящий драйвер из хранилища. Если там драйвера нет, ОС ищет подходящий в Windows Update и устанавливает его с серверов Microsoft. Вы также можете установить драйвер вручную, например, скачав его с сайта изготовителя. В любом случае установленный драйвер помещается в хранилище.

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

Нужно ли удалять дубликаты драйверов

В подавляющем большинстве случаев удаление вручную или скриптом не требуется, потому что:

  • Хранилище драйверов редко достигает существенного размера относительно общего объема диска.
  • В Windows 8.1 и 10 предусмотрена автоматическая очистка старых пакетов драйверов. Windows 10 с контролем памяти «на автомате» в целом хорошо с этим справляется без ручного вмешательства (в классической утилите cleanmgr тоже имеется опция очистки).

Но есть сценарии, при которых очистка дубликатов может иметь смысл, например:

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

Сочетание этих факторов вкупе с реальной необходимостью освободить как можно больше места может быть поводом к анализу хранилища драйверов и удалению дубликатов. На системе моего коллеги именно так и было — 2.7GB дубликатов драйверов в хранилище занимали 2% SSD объемом 120GB.

10.0.17134
Total size of duplicate drivers: 2759.8 MB

ClassDescription                  Provider     Driver  Size (MB)Name         Version        Date       BootCritical
----------------                  ------------ ------      ---- ----         -------        ----       ------------
Extensions                        Intel        oem17.inf      0 hdbusext.inf 26.20.100.7263 2019-09-25        False
Extensions                        Intel        oem22.inf      0 hdbusext.inf 27.20.100.7989 2020-06-05        False
System devices                    Intel        oem15.inf    0,3 heci.inf     1815.12.0.2021 2018-04-11         True
Display adapters                  Intel        oem7.inf   814,7 igdlh64.inf  23.20.16.4944  2018-02-04        False
Display adapters                  Intel        oem16.inf 1004,1 igdlh64.inf  26.20.100.7263 2019-09-25        False
Display adapters                  Intel        oem21.inf  907,3 igdlh64.inf  27.20.100.7989 2020-06-05        False
Sound, video and game controllers Intel(R)     oem23.inf    5,7 intcdaud.inf 10.26.0.9      2019-12-03        False
Sound, video and game controllers Intel(R)     oem18.inf    5,7 intcdaud.inf 10.26.0.8      2019-05-17        False
Sound, video and game controllers Intel(R)     oem19.inf    7,1 intcdaud.inf 10.27.0.5      2019-08-22        False
Sound, video and game controllers Intel(R)     oem6.inf     7,6 intcdaud.inf 10.24.0.3      2017-12-06        False
Sound, video and game controllers Intel(R)     oem24.inf    7,1 intcdaud.inf 10.27.0.8      2020-01-21        False
Network adapters                  Cisco        oem11.inf    0,1 vpnva-6.inf  3.1.6019.0     2014-02-26        False
Network adapters                  Cisco        oem10.inf    0,1 vpnva-6.inf  3.1.4065.0     2013-08-30        False

Это, кстати, вывод скрипта, который я разберу ниже.

Как определяются дубликаты драйверов

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

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

Безопасно ли удалять дубликаты драйверов

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

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

Зачем нужен скрипт, если есть Driver Store Explorer

В домашних условиях вы можете задействовать удобную утилиту Driver Store Explorer с графическим интерфейсом и открытым исходным кодом.

Дубликаты драйверов

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

Вообще, для меня эта запись не столько про удаление драйверов, сколько про PowerShell :) Потому что столкнувшись с задачей по автоматизации, я всегда стараюсь развить навыки, ибо они пригодятся и в будущем.

Сбор и вывод сведений должен работать в Windows 8.1+, а резервное копирование и удаление – только в Windows 10 1607+ (подробнее о причинах ниже).

👉 Скачать скрипт dupe-drivers.ps1 в архиве (инструкции по разблокировке и запуску).

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

Параметры скрипта

Вы можете запускать скрипт с параметрами:

  • -Outfile — путь к файлу с результатами. По умолчанию — рабочий стол.
  • -Backup — путь к папке для бэкапа драйверов. По умолчанию – C:drivers-backup-YYYY-MM-DD, но лучше указать другой диск, конечно.
  • -HideRollback — исключение из анализа/вывода драйверов, использующихся для отката текущего драйвера. По умолчанию исключаются только версии, используемые системой, т.е. самые новые. Параметр не принимает значения.

Получение списка дубликатов

Красота PowerShell в том, что непростая на первый взгляд цель достигается одной командой!

$dupe = @()
Get-WindowsDriver -Online |
Select-Object ClassDescription, ProviderName, Driver, Version, Date, BootCritical, 
@{name="Name"; expression= {Split-Path -Path $_.OriginalFileName -Leaf}},
@{name="Cat"; expression= {Split-Path -Path $_.OriginalFileName}} |
Group-Object -Property Name | Where-Object {$_.Count -gt 1} |
ForEach-Object {$dupe += $_.Group | Sort-Object Date -Descending | Select-Object -Skip 1}

В первой строке просто объявляется массив для сбора в него дубликатов. Затем в дело вступает мощный конвейер. Это фактически «ванлайнер», но я разбил код на строки для наглядности:

  • Get-WindowsDriver получает список всех сторонних драйверов. Для вывода абсолютно всех драйверов можно использовать параметр -All, но здесь это не нужно.
  • Select-Object формирует список нужных для анализа свойств драйвера. Прелесть в том, что можно на лету преобразовывать их значения. Так в свойстве OriginalFileName содержится полный путь к исходному INF-файлу. У меня в строках 4 и 5:
    • Имя OriginalFileName заменяется на Name для краткости, а значение сокращается до имени файла с помощью командлета Split-Path с параметром -Leaf (последний элемент пути).
    • Имя Cat присваивается пути к родительской папке драйвера с помощью того же Split-Path, но уже без -Leaf. Путь пригодится дальше для подсчета размера дубликатов.
  • Group-Object группирует драйверы по исходному имени, а Where-Object отбирает имена, для которых имеется более одной группы. Логика та же, что в разделе статьи про определение дубликатов. На этом этапе такая картина:
    Count Name                      Group
    ----- ----                      -----
        4 tplcd.inf                 {@{ClassDescription=Monitors; ProviderName=Lenovo; Driver=oem16.inf; Version=6.13.3....
        2 powermgr.inf              {@{ClassDescription=System devices; ProviderName=Lenovo; Driver=oem33.inf; Version=1...
        2 nvhda.inf                 {@{ClassDescription=Sound, video and game controllers; ProviderName=NVIDIA Corporati...
        2 itpcdless.inf             {@{ClassDescription=Human Interface Devices; ProviderName=Microsoft; Driver=oem49.in...
        2 ipcdless.inf              {@{ClassDescription=Human Interface Devices; ProviderName=Microsoft; Driver=oem56.in...
  • Наконец, с помощью ForEach-Object для каждой группы выполняется вложенный конвейер:
    • Sort-Object сортирует драйверы по дате (новые сверху)
    • Select-Object с параметром -Skip 1 выбирает все объекты кроме первого, т.е. кроме самого нового драйвера
    • $dupe += добавляет эти объекты в ранее объявленный массив

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

Подсчет размера дубликатов

В NTFS нет понятия размер папки, поэтому файловые менеджеры подсчитывают его динамически, исходя из общего размера файлов в папке. В PowerShell это тоже достигается перебором всех файлов в папке и суммированием их свойства Length (размера в байтах), хотя отдельный командлет не помешал бы. Это не самый эффективный способ, есть и побыстрее — модуль GetSTFolderSize, но для небольшого количества папок и файлов его достаточно.

$dupe | ForEach-Object {
    $totalsize += [math]::Round(((Get-ChildItem $_.Cat -Recurse | Measure-Object length -Sum).Sum)/1mb,1)
    }

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

Поскольку по ходу дела вычисляется размер каждого дубликата, хочется заодно добавить его в сводку, т.е. в объект $dupe. Для этого предусмотрен командлет Add-Member, с которым я раньше не пересекался в практических задачах.

Здесь у меня случился единственный затык – не работал конвейер вида $dupe | Add-Member. Василий Гусев объяснил, что этот командлет не выполняет скриптблок (здесь – подсчет размера файлов), а сохраняет его в значение.

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

$dupe | ForEach-Object {
    $s = [math]::Round(((Get-ChildItem $_.Cat -Recurse | Measure-Object length -Sum).Sum)/1mb,1)
    #Add size info to the dupe driver object
    $_ | Add-Member -MemberType NoteProperty -Name Size -Value $s
    #Calculate total size of dupe drivers
    $totalsize += $s
    }

Однако в комментариях Андрей предложил более оптимальный вариант — добавлять свойство Size на этапе формирования объекта, что делает Add-Member ненужным на этом этапе. Скрипт обновлен, но в статье я оставил как было.

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

Бэкап и удаление дубликатов

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

Бэкап

Начиная с Windows 8.1 Update 1 для экспорта всех сторонних драйверов можно задействовать dism.exe с ключом /Export-Driver или командлет PowerShell Export-WindowsDriver. Утилита pnputil обрела такую возможность в Windows 10 1607, причем с выбором драйверов для экспорта.

Бэкап всех дубликатов. Массив просто передается по конвейеру утилите pnputil.

$dupe | ForEach-Object {pnputil /export-driver $_.Driver $Backup}

Бэкап только новейших дубликатов. Мне больше нравится вариант резервного копирования только того драйвера, который [предположительно] предлагается для отката в диспетчере устройств. Учтите, что при запуске скрипта с параметром -HideRollback откатная версия не удаляется, а в резервную копию попадает та, что была установлена перед ней.

$dupe | Group-Object -Property Name | ForEach-Object {
        $_.Group | Select-Object -First 1 | ForEach-Object {
                pnputil /export-driver $_.Driver $Backup
            }
    }

Здесь я снова группирую драйверы по имени и выбираю нужные командлетом Select-Object. Выше я с помощью -Skip 1 отбрасывал новейший драйвер, т.е. используемый системой, чтобы оставить только дубликаты. А сейчас выбираю среди дубликатов самый новый, т.е. первый, с помощью -First 1.

Удаление

Парадоксально, но в инструментарии DISM не предусмотрено удаление драйвера из запущенной системы. Командлет PowerShell Remove-WindowsDriver и ключ dism.exe /Remove-Driver работают только с автономными образами. Зато такая функция есть в утилите pnputil, которая активно развивается в Windows 10, что следует из документации.

Отмечу, что pnputil постепенно вобрала в себя ряд функций консольного диспетчера устройств devcon. Теперь утилиты и модуля PowerShell PnpDevice уже достаточно для автоматизации различных типовых задач вроде удаления или перезапуска устройств.

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

$dupe | Where-Object {$_.Name -eq 'igdlh64.inf'} | 
ForEach-Object {pnputil /delete-driver $_.Driver}

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

Удаление всех дубликатов. Весь массив передается по конвейеру утилите pnputil.

$dupe | ForEach-Object {pnputil /delete-driver $_.Driver}

Рекомендации по использованию скрипта

Публикация статьи и скрипта не является призывом к удалению дубликатов драйверов. Я делюсь с вами способом и инструментом, который вы можете подстроить под свою ситуацию по результатам анализа.

  • Не выполняйте удаление вслепую, сначала изучите расклад. Чистка не имеет смысла без существенной экономии.
  • Не удаляйте драйверы без предварительного бэкапа. Его можно зачистить спустя какое-то время, если места нет.
  • Оставляйте в хранилище последний дубликат, сохраняя возможность отката (вариант для самых осторожных). Это достигается запуском скрипта с параметром -HideRollback.

Дискуссия

Давайте посмотрим, как у вас обстоят дела с дубликатами драйверов! В комментариях опубликуйте:

  1. Ссылку на pastebin с результатами выполнения скрипта.
  2. Ожидаемый размер экономии от удаления пакетов драйверов в утиите cleanmgr, запущенной из командной строки от имени администратора.
    Дубликаты драйверов
  3. Объем системного раздела из свойств диска. Это позволяет оценить долю пространства, занятого старыми версиями.
  4. Дату первоначальной установки ОС. Это может дать дополнительную пищу для размышлений. Тему я разбирал совсем недавно.

Каждый раз, когда вы устанавливаете или обновляете драйвер устройства, Windows продолжает хранить старую версию драйвера на диске в системном хранилище драйверов (Driver Store). Благодаря этому, если система работает некорректно с новым драйвером или возникает какой-нибудь конфликт, пользователь в любой момент может откатить текущую версию драйвер и заменить его более старой версий. На диске хранилище драйверов расположено в папке C:windowssystem32DriverStoreFileRepository. Однако, многие пользователи Windows замечают, что со временем размер каталога %windir%system32DriverStoreFileRepository начинает занимать все больше и больше места на системном диске. В моем случае размер этого каталога на диске составляет почти 11,5 Гб. Это довольно много, особенно для моего не слишком большого SSD диска.

Чтобы очистить хранилище драйверов от старых и неиспользуемых драйверов, я нашел небольшой PowerShell скрипт, который позволяет удалить все версии одного и того же драйвера в хранилище (по сути это частичные дубли), сохранив в системе только самую свежую версию.

Внимание! Ни в коем случае не нужно вручную удалять папки или файлы из каталога FileRepository!

Важные советы.

  • Для запуска данного скрипта я использовал версию PowerShell, устанавливаемая вместе с Windows Management Framework 5.1 (нужен как минимум WMF4)
  • Перед запуском скрипта убедитесь, у вас под рукой имеются все драйвера для важных компонентов системы (видеокарта, чипсет, звук и т.д.). В случае чего вы сможете с помощью них быстро переустановить драйвер и задействовать проблемное оборудование.
  • Также желательно предварительно создать точку восстановления системы. Для этого воспользуйтесь командой: 

    CheckpointComputer Description TochkaPeredOchistkoyDraiverStore

    . Проверить успешность создания точки восстановления можно с помощью команды 

Список всех сторонних (не Microsoft) драйверов, которые установлены в системе можно получить с помощью утилиты DISM:

dism /online /getdrivers

Вывод данной команды нужно будет распарсить с помощью PowerShell, найти дубликаты одного и того же драйвера и отсортировать их по дате. Из итогового списка нужно исключить самую последнюю (актуальную) версию каждого драйвера.

Затем можно удалить драйверы, оставшиеся в списке с помощью утилиты pnputil. В некоторых случаях, если драйвер не удается удалить, нужно воспользоваться принудительным удалением с помощью ключа -f.

Сам скрипт выглядит следующим образом:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

$dismOutput = dism /online /get-drivers

$Lines = $dismOutput | select -Skip 10

$Tbls = «theName»

$Drivers = @()

foreach ( $Line in $Lines ) {

    $tmp = $Line

    $txt = $($tmp.Split( ‘:’ ))[1]

    switch ($Tbls) {

        ‘theName’ {

            $Name = $txt

            $Tbls = ‘theFileName’

            break

        }

        ‘theFileName’ {

            $FileName = $txt.Trim()

            $Tbls = ‘theEntr’

            break

        }

        ‘theEntr’ {

            $Entr = $txt.Trim()

            $Tbls = ‘theClassName’

            break

        }

        ‘theClassName’ {

            $ClassName = $txt.Trim()

            $Tbls = ‘theVendor’

            break

        }

        ‘theVendor’ {

            $Vendor = $txt.Trim()

            $Tbls = ‘theDate’

            break

        }

        ‘theDate’ {

            # для более удобной сортировки сменим формат данных

            $tmp = $txt.split( ‘.’ )

            $txt = «$($tmp[2]).$($tmp[1]).$($tmp[0].Trim())»

            $Date = $txt

            $Tbls = ‘theVersion’

            break

        }

        ‘theVersion’ {

            $Version = $txt.Trim()

            $Tbls = ‘theNull’

            $params = [ordered]@{ ‘FileName’ = $FileName

                ‘Vendor’                     = $Vendor

                ‘Date’                       = $Date

                ‘Name’                       = $Name

                ‘ClassName’                  = $ClassName

                ‘Version’                    = $Version

                ‘Entr’                       = $Entr

            }

            $obj = New-Object -TypeName PSObject -Property $params

            $Drivers += $obj

            break

        }

        ‘theNull’ {

            $Tbls = ‘theName’

            break

        }

    }

}

Write-Host «Все установленные сторонние драйверы»

$Drivers | sort Filename | ft

Write-Host «Разные версии»

$last = »

$NotUnique = @()

foreach ( $Dr in $($Drivers | sort Filename) ) {

    if ($Dr.FileName -eq $last ) { $NotUnique += $Dr }

    $last = $Dr.FileName

}

$NotUnique | sort FileName | ft

Write-Host «Outdated drivers»

$list = $NotUnique | select -ExpandProperty FileName -Unique

$ToDel = @()

foreach ( $Dr in $list ) {

    Write-Host «duplicate found» -ForegroundColor Yellow

    $sel = $Drivers | where { $_.FileName -eq $Dr } | sort date -Descending | select -Skip 1

    $sel | ft

    $ToDel += $sel

}

Write-Host «Drivers to remove» -ForegroundColor Red

$ToDel | ft

# удаляем оставшиеся старые версии драйверов с помощью pnputil

foreach ( $item in $ToDel ) {

    $Name = $($item.Name).Trim()

    Write-Host «deleting $Name» -ForegroundColor Yellow

    Write-Host «pnputil.exe -d $Name» -ForegroundColor Yellow

    Invoke-Expression -Command «pnputil.exe -d $Name»

}

Совет. Если вы хотите только вывести список неиспользуемых драйверов на экран, закомментируйте строку с командой Invoke-Expression (поставьте перед ней символ #).

Скопируйте указанный код и сохраните его в текстовый файл cleanupdriver.ps1. Откройте командную строку PowerShell с правами администратора и разрешите выполнение неподписанных скриптов:

SetExecutionPolicy Scope Process ExecutionPolicy Bypass

Запустите скрипт: 

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

В моем случае (с момента установки системы прошло чуть больше 2 лет) размер каталога FileRepository уменьшился с 11,5 до 1.5 Гб. Почти в 8 раз, неплохо!

  • Remove From My Forums
  • Question

  • I would like to remove a driver «video» using a powershell. If not possible then vbscript.

    I am able to find if driver is installed:

    Get-WmiObject
    Win32_PnPSignedDriver|
    select
    devicename|
    where {$_.devicename
    -like
    «*DameWare Development*»}

    THis will return the devicename if installed.

    I am not able to find a way to removbe it, or delete it?

    I would like to do it without adding any moduals if possible. Need to do this during the MDT build.

    Thanks for the help.

    • Edited by

      Friday, July 31, 2015 5:30 PM

    • Moved by
      Bill_Stewart
      Wednesday, November 4, 2015 7:40 PM
      Move to more appropriate forum

Not only are there not PowerShell cmdlets for this, it seems there isn’t even managed code to do it within the .Net framework (what follows is basically a translation of that answer into PowerShell).

Luckily, the .Net framework can call windows APIs through platform invoke (p/invoke), and PowerShell can do so too.

The linked answer shows how to do it in C#. To do it powershell we’ll use the same signature that was generated in that answer, and use it with the Add-Type cmdlet (see example 5) to make it available to your script.

$signature = @"
[DllImport("Setupapi.dll", EntryPoint="InstallHinfSection", CallingConvention=CallingConvention.StdCall)]
public static extern void InstallHinfSection(
    [In] IntPtr hwnd,
    [In] IntPtr ModuleHandle,
    [In, MarshalAs(UnmanagedType.LPWStr)] string CmdLineBuffer,
    int nCmdShow);
"@
$Win32Functions = Add-Type -MemberDefinition $signature -UsingNamespace System.Runtime.InteropServices -Name Win32SInstallHinfSection -Namespace Win32Functions -PassThru 

$Win32Functions::InstallHinfSection([IntPtr]::Zero, [IntPtr]::Zero, "<section> <mode> <path>", 0)

See the MSDN documentation for InstallHinfSection for details on the parameters (particularly the string format).

Добрый день уважаемые читатели и просто посетители блога, рад, что вы снова заглянули ко мне. Когда вы устанавливаете свежие обновления Windows 10 или обновляете драйвера на ваше железо, в операционной системе остаются копии предыдущих, старых драйверов, и занимают они некоторое дисковое пространство, хорошо когда у вас ssd диск большого объема, а если всего 60 гб, и для него очень критично свободное пространство, так, что избавиться от ненужных файлов можно и нужно, я покажу как удалить старые драйвера windows 10 Anniversary Update.

Нужно ли удалять старые драйвера

И так давайте разбирать в вопросе, нужно ли удалять старые драйвера в операционной системе Windows 10. Как я и писал выше они не несут ни какой полезности, если вы при установке новых драйверов Windows, через некоторое время поняли, что все устройства работают так как нужно и проблем ни каких нет. Если драйвер сбойный, то вы в большинстве случаев получите разновидность синего экрана с кодом ошибки, по которому можно понять, что за устройство стало его причиной, простой недавний пример ошибка dpc watchdog violation.

Вторым фактором, может служить экономия дискового пространства, очень критичная для ссд, об этом я писал в статье как увеличить срок службы ssd диска. Так, что отвечая на вопрос о необходимости удаления старых драйверов, ответ ДА! нужно.

Немного теории

Драйвер – это неотъемлемая часть программного обеспечения. Он необходим для правильного взаимодействия операционной системы и оборудования. Без его установки устройство будет функционировать неправильно или очень ограниченно.

В современную ОС Windows 10 уже предустановлено программное обеспечение для большинства устройств, и, скорее всего, проблем с базовой настройкой не возникнет. Но, например, для видео, аудио, принтера установка родного драйвера очень рекомендуется.

В каких случаях может потребоваться удаление драйвера:

  • Вы установили несовместимую версию с устройством.
  • Было произведено неудачное обновление драйвера.
  • Устройство было заменено/отсоединено от ПК.

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

Для чего нужно удалять устаревшие драйверы

Для чего нужно удалять устаревшие драйверы

Бывает так, что убирать драйверы – не просто прихоть, а необходимость. Если во время обновлений приложений к ним добавляется всего несколько новых файлов, то с системным программным обеспечением всё складывается совершенно по-другому. Разработчики иногда досконально изменяют структуру софта, к примеру, на аудио аппаратуру, особенно часто это стало прослеживаться после появления девайса DirectX. И тогда стало необходимостью удалять все устаревшие версии драйверов. Произвести стирание можно некоторыми программами и способами, это касается не только составляющих первой важности, но и определённой операционной системы. Данные процессы могут быть полезными для всех версий Windows, независимо от инновационных введений.

ВАЖНО. Не стоит производить чистку драйверов, если у вас нет новых на замену. Стоит помнить о том, что после процедуры снесения ПО, ОС совершенно перестанет с ними контактировать. Поэтому запаситесь новой версией заранее или создайте резервную копию, чтобы можно было вернуть всё на исходную.

Способ 1: удаление с помощью деинсталлятора

1. Откройте меню Пуск и войдите в Параметры.

2. Перейдите в раздел «Приложения».

Видеокарта

NVIDIA

Опуститесь немного вниз, пока не появится список с программным обеспечением NVIDIA.

Нажмите на «NVIDIA графический драйвер». Снизу откроется пункт «Удалить», щелкните по нему.

Подтвердите действие.

Аналогично повторите действия с остальными программами.

AMD

В списке программ поищите пункты с установленным обеспечением от «AMD Catalyst» и удалите все поочередно.

Intel HD Graphics

Intel HD Graphics – встроенный в ядро процессора графический адаптер, драйвер которого я бы не советовал удалять. Он может пригодиться в случае, если внешняя видеокарта даст сбой или вы решите ее отключить от компьютера.

Сама процедура аналогична: нужно в списке найти пункт «Драйвер Графики Intel или Intel HD Graphics» и убрать его.

Звуковая карта и устройства печати

На большинство моделей материнских плат по умолчанию установлена встроенная звуковая карта Realtek High Definition Audio. Значок приложения выглядит следующим образом.

Щелкнув по кнопке «Удалить», вы инициализируете процесс деинсталляции.

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

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

Приложение Driver Sweeper

Еще одна бесплатная утилита, предназначена для деинсталляции программного обеспечения, управляющего функционированием оборудования.

  • После запуска программы переключаем язык ее интерфейса на «Русский», кликнув «Language» в меню «Options».
  • Выбираем «Russian» и жмем «Apply».

  • Переходим в «Анализ и очистка».
  • Выбираем разделы и жмем «Анализ» для поиска касающегося их софта.

  • Отмечаем флажками все пункты (как файлы, так и записи реестра) и кликаем «Очистка».

Посмотрите ещё: Windows 7 и Windows XP локальная сеть

  • Подтверждаем удаление.

Перезагружаем Windows 7 для окончания деинсталляции.

Способ 2: с помощью системных средств

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

В диспетчере устройств

Возможно, вы столкнетесь с ситуацией, когда деинсталлятора нет на ПК. Особенно это актуально для устаревших устройств. Тогда действуем следующим образом.

1. Щелкаем правой кнопкой мышки по меню Пуск и открываем «Диспетчер устройств».

2. Раскрываем список устройств, в котором установлен драйвер.

3. Жмем по нему правой кнопкой мыши и выбираем пункт «Удалить устройство».

4. Подтверждаем действие кнопкой «Удалить».

В средстве очистки системы

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

1. Откройте папку «Этот компьютер».

2. Нажмите правой кнопкой мышки по Локальному диску С и откройте «Свойства».

3. Кликните по кнопке «Очистка диска».

4. Далее щелкните по кнопке «Очистить системные файлы».

5. В пункте «Пакеты драйверов устройств» будет показан объем устаревших файлов, которые можно очистить, установив галочку и щелкнув «ОК».

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

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

1. Щелкните правой кнопкой мыши по значку «Этот компьютер» и перейдите в «Свойства».

2. Откройте пункт «Дополнительные параметры системы».

3. Кликните по кнопке «Переменные среды».

4. Нажмите «Создать».

5. В поле «Имя переменной» вставьте devmgr_show_nonpresent_devices. В поле «Значение переменной» задайте параметр 1 и кликните по ОК.

6. Перейдите в «Диспетчер устройств».

7. В меню «Вид» кликните по пункту «Показать скрытые устройства».

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

С помощью командной строки

Способ пригодится в том случае, если стандартно убрать драйвер не получается. Например, отключенный или старый, который конфликтует с новым оборудованием и дает сбой в системе.

1. В меню Пуск напечатайте командная строка и запустите приложение с правами администратора.

2. Введите команду pnputil.exe -e > C:drivers. txt и нажмите клавишу Enter. Это команда для создания текстового файла с выгрузкой списка устройств.

3. Перейдите в Локальный диск С и откройте текстовый файл drivers.txt.

4. Пролистайте список и найдите название устройства, которое нужно убрать. Сверните Блокнот, но не закрывайте его, и вновь откройте командную строку с административными правами.

Введите команду pnputil.exe -d oem11.inf, где oem11.inf — файл драйвера оборудования, которое нужно убрать.

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

5. Введите команду pnputil.exe -f -d oem11.inf, где ключ f задает команду принудительного удаления.

Вот и всё! Оборудование и его файл успешно удалены.

Способ 3: сторонними программами

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

Display Driver Uninstaller

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

1. Официальный сайт для загрузки программы: guru3d.com/files-details/display-driver-uninstaller-download.html. После распаковки запустите файл «Display driver uninstaller.exe».

2. Программа предложит перезагрузиться в безопасном режиме, так как некоторые файлы могут быть задействованы в системе.

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

  • В меню Пуск введите команду msconfig и запустите приложение от имени администратора.
  • На вкладке «Загрузка» активируйте галочку в пункте «Безопасный режим» и нажмите «Применить».

3. Перезагрузите компьютер и запустите программу. В правом переключателе выберите тип оборудования.

В следующем переключателе укажите производителя из списка.

Нажмите «Удалить и перезагрузить».

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

Преимущество программы:

  • Доступна для загрузки в бесплатном доступе.
  • Не требует установки.
  • Имеет интуитивно понятный интерфейс.

Driver Fusion

Driver Fusion – платная программа с ограниченными возможностями в бесплатной версии. Тем не менее, она позволяет убрать некоторые устаревшие драйвера даже в бесплатной редакции.

Загрузить и установить программу можно с официального сайта: treexy.com/products/driver-fusion. В главном окне программы перейдите на вкладку «Очиститель драйверов» и выберите тип устройства.

Если программа обнаружит деинсталлятор, порекомендует выполнить очистку в параметрах приложений. Далее для полной очистки остаточных файлов можно щелкнуть по кнопке «Очистить».

Преимущество программы:

  • Большой выбор оборудования.
  • Быстрое и качественное сканирование ПК.
  • Русский интерфейс меню.

Driver Booster

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

  1. Скачайте программу с официального сайта: ru.iobit.com/driver-booster.php.
  2. В главном окне нажмите «Сканировать».
  3. Выберите, что сделать с устаревшим устройством.

Дополнительные полезные функции можно найти на вкладке «Инструменты».

Автор: Илья Курбанов

Со временем Windows хранит множества резервных копий в системе, временные файлы, старые драйвера, которые постепенно будут занимать пространство на жестком диски. Конечно можно почистить диск “C” от ненужных файлов , чтобы освободить место на вашем жестком диске, но что делать, если старые драйвера какого-либо устройства мешают установки новых версий? Особенно проблемы вызывают беспроводные мыши, клавиатуры и другие USB устройства, которые не хотят иногда работать, пока не удалим старые драйвера и не установим новые.
Драйвера это необходимые маленькие приложения, которые нужны, чтобы подключить любое устройство и заставить его работать. В системе Windows очень большая база драйверов для разных типов устройств: принтеры, мыши, звуковые карты, платы и т.п. Некоторые производители выпускают свои версии драйвера, которые необходимы для работы и не всегда в базе windows драйвера могут работать с тем или иным устройством. Для этого нам нужно удалить старые ненужные версии драйвера и установить новые от производителя.

Понравилась статья? Поделить с друзьями:
  • Как удалить драйвер wifi адаптера windows 10
  • Как удалить драйвер via hd audio для windows 10
  • Как удалить драйвер usb устройства windows 10
  • Как удалить драйвер tages protection windows 7
  • Как удалить драйвер synaptics touchpad windows 10