有什么方法可以强制 Windows 重新检查全部设备是否与数据库 (HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath) 中的驱动程序相对应并更新到最新可用驱动程序?这类似于 sysprep 在首次启动克隆的 HD 映像时执行的操作。
例如:在主板上安装 Windows 时,某些设备会被 Windows CD 中的驱动程序识别并自动安装。其他一些设备无法识别,因此无法安装。通常,您可以使用 MB CD 来更新所有驱动程序。有两种方法可以做到这一点:
.exe 文件:只需运行该文件,(通常)它会更新所有驱动程序(无论是否识别)。
.inf 文件:如果设备无法识别,驱动程序安装向导将在 CD 上找到驱动程序自动地,否则您将必须手动更新(设备管理器->设备属性->...->更新驱动程序)如果您知道 MB CD 上哪些设备有更新的驱动程序。您可以检查 CD 上的 .inf 文件以查找哪些受支持,但这是一个痛苦的过程。
当我创建 PC 映像以供稍后克隆时(我在 IT 部门工作),我通常会修改 DevicePath 注册表项并使用驱动程序包,然后 sysprep 会处理其余部分。但是,当您想安装与保存的 HD 映像不同的 PC 时(因此,您不使用 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>
您还可以在命令提示符中使用 /C 标志运行 DPInst.exe 来查看它在做什么。
DPInstall 文档在这里:https://msdn.microsoft.com/...
答案3
文章直接安装或更新驱动程序的脚本Microsoft Catalog 包含一个用于为所有驱动程序执行此操作的 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 }