如何更新所有 Windows 驱动程序?

如何更新所有 Windows 驱动程序?

有什么方法可以强制 Windows 重新检查全部设备是否与数据库 (HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath) 中的驱动程序相对应并更新到最新可用驱动程序?这类似于 sysprep 在首次启动克隆的 HD 映像时执行的操作。

例如:在主板上安装 Windows 时,某些设备会被 Windows CD 中的驱动程序识别并自动安装。其他一些设备无法识别,因此无法安装。通常,您可以使用 MB CD 来更新所有驱动程序。有两种方法可以做到这一点:

  1. .exe 文件:只需运行该文件,(通常)它会更新所有驱动程序(无论是否识别)。

  2. .inf 文件:如果设备无法识别,驱动程序安装向导将在 CD 上找到驱动程序自动地,否则您将必须手动更新(设备管理器->设备属性->...->更新驱动程序)如果您知道 MB CD 上哪些设备有更新的驱动程序。您可以检查 CD 上的 .inf 文件以查找哪些受支持,但这是一个痛苦的过程。

当我创建 PC 映像以供稍后克隆时(我在 IT 部门工作),我通常会修改 DevicePath 注册表项并使用驱动程序包,然后 sysprep 会处理其余部分。但是,当您想安装与保存的 HD 映像不同的 PC 时(因此,您不使用 sysprep),此过程不适用。

我想要做的是:

  1. 安装 Windows 后,将驱动包解压到一个文件夹中。

  2. 修改设备路径

  3. 强制 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 }

答案4

有一些(非免费)程序声称可以为您做到这一点。我能想到的两个是:

驾驶机器人

司机侦探

我没有使用过它们,所以不能保证它们有多好。

相关内容