如何通过PowerShell检查Windows Update目录中是否有更新的驱动版本
使用PowerShell检查Windows Update中的驱动版本是否比本地已安装的更新
一、获取本地已安装的目标驱动版本
先用Get-WindowsDriver命令定位目标inf文件的已安装版本,以abc.inf为例:
# 获取本地abc.inf的驱动版本 $localDriver = Get-WindowsDriver -Online -Driver *abc.inf* | Select-Object DriverFileName, DriverVersion if ($localDriver) { $localVersion = [version]$localDriver.DriverVersion Write-Host "本地已安装abc.inf版本: $localVersion" } else { Write-Host "未找到本地安装的abc.inf驱动" exit }
这里把DriverVersion转成[version]类型,避免直接字符串对比出现的逻辑错误(比如1.10和1.2的字符串对比会失真)。
二、通过Windows Update Agent(WUA) API查询可用驱动更新
利用WUA的COM对象搜索WU服务器上的未安装驱动更新,同时配置参数确保不会遗漏可选或被替代的更新:
# 初始化WUA会话 $updateSession = New-Object -ComObject Microsoft.Update.Session $updateSearcher = $updateSession.CreateUpdateSearcher() # 配置搜索规则:包含可选更新、允许搜索已被替代的更新 $updateSearcher.IncludePotentiallySupersededUpdates = $true $updateSearcher.SearchScope = 1 # 1=搜索官方WU服务器,2=搜索本地WSUS # 搜索未安装的驱动类更新 try { $searchResult = $updateSearcher.Search("Type='Driver' and IsInstalled=0") Write-Host "找到$($searchResult.Updates.Count)个可用驱动更新" } catch { Write-Host "搜索WU更新失败: $_" exit }
三、提取更新包内的目标inf文件版本并对比
遍历每个搜索到的更新,提取其包含的inf文件信息,找到abc.inf后直接对比版本:
foreach ($update in $searchResult.Updates) { # 遍历更新的可安装项 foreach ($installItem in $update.GetInstallableItems()) { # 遍历可安装项内的所有文件 foreach ($file in $installItem.Files) { if ($file.FileName -eq "abc.inf") { $availableVersion = [version]$file.Version Write-Host "找到WU上的abc.inf更新,版本: $availableVersion" # 版本对比逻辑 if ($availableVersion -gt $localVersion) { Write-Host "★ 该版本比本地已安装的更新!" # 如需仅下载更新包,可调用以下命令(需管理员权限) # $update.Download() } elseif ($availableVersion -eq $localVersion) { Write-Host "该版本与本地已安装的一致" } else { Write-Host "该版本比本地已安装的旧" } } } } }
补充说明
- 脚本需要管理员权限运行,否则无法正常访问WUA API或本地驱动信息。
- 如果要针对特定硬件设备的驱动,可先获取设备的
HardwareID,在遍历更新时过滤匹配项:# 获取目标设备的HardwareID $targetDevice = Get-PnpDevice -FriendlyName "你的设备名称" | Select-Object -First 1 $hardwareId = $targetDevice.HardwareID[0] # 在遍历更新时检查硬件ID匹配 if ($update.DriverHardwareIDs -contains $hardwareId) { # 仅处理该设备的驱动更新 } - 调用
$update.Download()只会下载更新包,不会自动安装,下载的文件默认存放在系统更新缓存目录。
内容的提问来源于stack exchange,提问作者SendETHToThisAddress
相关产品推荐
相关产品推荐

