Есть ли способ заставить Windows перепроверить?всеустройств с драйверами в своей базе данных (HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath) и обновить до последних доступных драйверов? Что-то похожее на то, что делает sysprep, когда клонированный образ HD запускается в первый раз.
Например: Когда вы устанавливаете Windows на материнскую плату, некоторые устройства распознаются и устанавливаются автоматически с драйверами с компакт-диска Windows. Некоторые другие не распознаются, поэтому не устанавливаются. Обычно вы используете компакт-диск MB для обновления всех драйверов. Есть два способа сделать это:
Файл .exe: просто запустите его, и (обычно) он обновит все драйверы (распознанные или нет).
Файл .inf: ЕСЛИ устройство не распознано, мастер установки драйвера найдет драйвер на компакт-дискеавтоматически, в противном случае вам придется обновить вручную (Диспетчер устройств -> Свойства устройства -> ... -> Обновить драйвер)ЕСЛИвы знаете, какие устройства имеют обновленные драйверы на CD MB. Вы можете проверить файлы .inf на CD, чтобы узнать, какие из них поддерживаются, но это болезненный процесс.
Обычно я изменяю ключ реестра DevicePath и использую пакеты драйверов, когда создаю образ ПК для последующего клонирования (я работаю в ИТ-отделе), а sysprep заботится обо всем остальном. Но когда вы хотите установить ПК иначе, чем сохраненный образ HD (поэтому вы не используете sysprep), этот процесс не применяется.
Вот что я хочу сделать:
После установки Windows распакуйте пакеты драйверов в папку.
Изменить путь к устройству
Заставьте Windows обновиться до более новых драйверов (самое главное здесь — _уже_распознанные_устройства_, с нераспознанными проблем не будет).
А вот третий шаг я не знаю, как сделать.
решение1
Попробуйте использоватьDevCon, утилита Microsoft.
Утилита DevCon — это утилита командной строки, которая действует как альтернатива диспетчеру устройств. Используя DevCon, вы можете включать, отключать, перезапускать, обновлять, удалять и запрашивать отдельные устройства или группы устройств.
Если вы распаковываете драйверы в папку поиска по умолчанию, вы можете выполнить повторное сканирование, чтобы обнаружить все устройства, которые не были установлены изначально.
решение2
Вы можете использовать DPInst.exe.
Вот руководство:http://blogs.technet.com/b/svengruenitz/...
Это файл DPInst.xml, который я использую для скрытого обновления всех драйверов.
<?xml version="1.0" ?>
<dpinst>
<!-- Suppress the addition of entries to Programs and Features in
Control Panel.-->
<suppressAddRemovePrograms/>
<!-- install a driver package for a Plug and Play (PnP) function driver
only if the driver package matches a device that is configured in a
computer and the driver package is a better match for the device than
the driver package that is currently installed on the device. -->
<scanHardware/>
<!-- Suppress the display of user interface items that DPInst and
Windows generate. -->
<quietInstall/>
<!-- The following search and subDirectory elements direct
DPInst to search all subdirectories (under the DPInst working
directory) to locate driver packages. -->
<search>
<subDirectory>*</subDirectory>
</search>
</dpinst>
Вы также можете запустить DPInst.exe в командной строке с флагом /C, чтобы увидеть, что он делает.
Документация по DPInstall находится здесь:https://msdn.microsoft.com/...
решение3
СтатьяСкрипт для прямой установки или обновления драйверовВ каталоге Microsoft содержится скрипт PowerShell, позволяющий выполнить эту операцию для всех драйверов.
Статья включает в себя хорошие объяснения каждой части сценария. Я воспроизвожу ниже только голый сценарий с небольшими изменениями (которые я не тестировал):
#search and list all missing Drivers
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.ServiceID = '7971f918-a847-4430-9279-4a52d1efe18d'
$Searcher.SearchScope = 1 # MachineOnly
$Searcher.ServerSelection = 3 # Third Party
$Criteria = "IsInstalled=0 and Type='Driver' and ISHidden=0"
Write-Host('Searching Driver-Updates...') -Fore Green
$SearchResult = $Searcher.Search($Criteria)
$Updates = $SearchResult.Updates
#Show available Drivers
$Updates | select Title, DriverModel, DriverVerDate, Driverclass, DriverManufacturer | fl
#Download the Drivers from Microsoft
$UpdatesToDownload = New-Object -Com Microsoft.Update.UpdateColl
$updates | % { $UpdatesToDownload.Add($_) | out-null }
Write-Host('Downloading Drivers...') -Fore Green
$UpdateSession = New-Object -Com Microsoft.Update.Session
$Downloader = $UpdateSession.CreateUpdateDownloader()
$Downloader.Updates = $UpdatesToDownload
$Downloader.Download()
#Check if the Drivers are all downloaded and trigger the Installation
$UpdatesToInstall = New-Object -Com Microsoft.Update.UpdateColl
$updates | % { if($_.IsDownloaded) { $UpdatesToInstall.Add($_) | out-null } }
Write-Host('Installing Drivers...') -Fore Green
$Installer = $UpdateSession.CreateUpdateInstaller()
$Installer.Updates = $UpdatesToInstall
$InstallationResult = $Installer.Install()
if($InstallationResult.RebootRequired) {
Write-Host('Reboot required! please reboot now..') -Fore Red
} else { Write-Host('Done..') -Fore Green }
решение4
Есть несколько (не бесплатных) программ, которые заявляют, что делают это за вас. Две, которые приходят мне на ум, это:
Я не пользовался ни одним из них, поэтому не могу ручаться за их качество.