PowerShell脚本问题:通过原始名称删除Windows驱动存储中的OEM驱动
解决通过Original Name查找并删除OEM驱动的PowerShell脚本问题
问题背景
有多台机器手动安装了未使用MSI的OEM驱动,需要编写PowerShell脚本定位对应oem##.inf文件,再调用pnputil完成删除。此前通过ProviderName(HID Global)查询删除的脚本可正常运行:
$driver = (Get-WindowsDriver -online | where ProviderName -eq "HID Global").Driver pnputil /delete-driver $driver /uninstall /force
但希望通过驱动的Original Name(值为cxru0x64.inf)精准查询,该驱动在pnputil中的信息如下:
Published Name: oem3.inf
Original Name: cxru0x64.inf
Provider Name: HID Global
Class Name: Smart card readers
Class GUID: {50dd5230-ba8a-11d1-bf5d-0000f805f530}
Driver Version: 05/25/2017 1.2.29.156
Signer Name: Microsoft Windows Hardware Compatibility Publisher
尝试以下代码未成功,预期$driver返回oem3.inf但无结果:
$driver = (Get-WindowsDriver -online | where OriginalName -eq "cxru0x64.inf").Driver pnputil /delete-driver $driver /uninstall /force
问题原因
Get-WindowsDriver返回的驱动对象中,对应pnputil里「Original Name」的属性是**OriginalFileName**,而非你使用的OriginalName,属性名称错误导致查询无匹配结果。
正确脚本
# 查找目标原始inf文件名对应的驱动 $targetDrivers = Get-WindowsDriver -Online | Where-Object { $_.OriginalFileName -eq "cxru0x64.inf" } # 循环处理所有匹配到的驱动(应对同一原始inf对应多个OEM驱动的场景) foreach ($driver in $targetDrivers) { # 明确调用pnputil.exe避免PowerShell命令歧义 pnputil.exe /delete-driver $driver.Driver /uninstall /force Write-Host "已尝试删除驱动:$($driver.Driver)" } # 处理未找到驱动的情况 if (-not $targetDrivers) { Write-Host "未找到OriginalFileName为cxru0x64.inf的驱动" }
额外说明
- 使用
Where-Object完整语法(而非简写where),在PowerShell中更规范,可避免潜在解析冲突 - 加入循环逻辑是为了兼容同一原始inf文件可能被多次安装为不同OEM驱动的场景
- 明确指定
pnputil.exe,防止PowerShell将pnputil识别为其他别名或命令
内容的提问来源于stack exchange,提问作者imyashy
相关产品推荐
相关产品推荐

