- PowerShell的 它允许您列出、筛选和导出 驱动程序 使用 Get-WmiObject 和 Get-WindowsDriver 等 cmdlet。
- driverquery, 设备管理器 SCCM(Get-CMDriver)是对控制器清单的补充。
- 某些动态加载的驱动程序需要额外的工具,例如 WinDbg 或验证器。
- PSWindowsUpdate 等模块和外部实用程序使更新和保持驱动程序最新变得容易。
在Windows环境下, 控制已安装的驱动程序及其版本。 它对于维护系统稳定性、排查蓝屏故障或准备迁移至关重要。PowerShell 已成为执行此类清单的极其便捷的工具,无需逐个访问设备管理器。
接下来你会看到 如何通过 PowerShell 以各种方式列出控制器,以及如何导出它们。 仔细分析文件,找出与其他文件的不同之处。 comandos 如 DRIVERQUERY 或者图形工具,甚至是如何处理更高级的场景,例如离线图像或动态加载的驱动程序。
什么是驱动程序?为什么要通过 PowerShell 列出驱动程序?

在Windows系统中,控制器或驱动程序是 一小段软件,充当操作系统和组件之间的中介。 硬件 (显卡、芯片组、 存储外围设备 USB等等)。虽然它们占用的代码量并不大,但它们对系统稳定性的影响却是巨大的。
当关键驱动因素(例如, 存储、网络、图形或芯片组故障可能导致崩溃、性能下降,甚至 蓝屏(BSOD)因此,在调试错误或准备重大更新时,拥有已安装驱动程序及其版本的清晰列表非常有用。
在您急于更改、卸载或回滚驱动程序之前,最好先…… 利用系统还原点最大限度降低风险这样,如果驱动程序更新出错,导致计算机运行异常甚至无法正常启动,您就可以进行恢复。
除了餐厅之外,建议…… 备份重要数据 (文档、照片、工作项目等),尤其是在操作存储驱动器时,因为操作失误可能会导致系统无法正确挂载驱动器或损坏信息。
PowerShell 中列出已安装驱动程序的基本命令
从 PowerShell 获取控制器清单的最直接方法是: 依赖WMI最常用的命令之一是:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, DriverVersion
使用此 cmdlet, PowerShell 查询 Win32_PnPSignedDriver WMI 类 返回已签名的 PnP 驱动程序列表,以及设备名称和系统当前与其关联的驱动程序版本。
如果您想了解每位司机的更多信息,可以添加如下字段: 友好名称、出版日期或制造商。 例如:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, FriendlyName, Manufacturer, DriverVersion, DriverDate
通过本次咨询,您将获得 每条记录的信息更加完整。这样可以检测到旧版本、特定制造商或多年未更新的驱动程序。
如何将驱动程序列表导出到文件(TXT 或 CSV)
在实际应用中,仅仅在屏幕上查看列表往往是不够的。最便捷的方法是…… 将结果保存到文件 例如,可以在 Excel 中分析它,与团队共享,或者将其作为系统状态的快照,在进行任何更改之前保存。 删除旧驱动程序.
如果您只需要一个简单的纯文本列表,可以将输出重定向到文件:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, DriverVersion > C:\drivers.txt
该命令会创建一个文件 C:\drivers.txt 配备简洁的设备和版本列表。非常适合快速参考或轻松附加到报告中。
当您需要更易于管理的筛选和排序工具时,最佳选择是使用 CSV 和 Export-CSV cmdlet一个非常常见的例子是:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, FriendlyName, DriverVersion, DriverDate | Export-CSV -Path "./MisDrivers.csv" -NoTypeInformation
使用此命令,一个名为 MyDrivers.csv 您可以用 Excel 或任何电子表格程序打开它。 按版本排序、按驱动程序日期筛选、搜索特定制造商等等。
虽然有时有人说 PowerShell“不允许导出”驱动程序列表,但实际上 是的,可以完美导出。 如您刚才所见,可以使用输出重定向或导出 CSV 文件。然后,您可以将这些信息复制、粘贴到任何您想要的地方,或进行其他操作。
按制造商、名称或特定文本筛选驱动程序
通常情况下,您不会想一次性查看所有驱动程序,而是希望专注于特定制造商或设备类型。为此,您可以…… 将过滤器与 Where-Object 链接起来 关于每个驱动程序的特性。
例如,如果您只想保留驱动程序, 英特尔你可以做一些很简单的事情,比如:
Get-WmiObject Win32_PnPSignedDriver | Select DeviceName, DriverVersion | Where-Object { $_.DeviceName -like "*Intel*" }
该命令遍历 WMI 返回的所有条目, 它只保留设备名称包含字符串“Intel”的设备。使用星号作为通配符,可以在文本中的任何位置搜索部分匹配项。
同样的方法也可用于查找与特定应用程序或硬件类型相关的驱动程序,例如: 更新 USB 驱动程序如果你知道部分名称、制造商或路线模式,你就可以 将过滤器调整到最舒适的属性 在每种情况下。
从设备管理器和其他 Windows 工具中查看驱动程序
尽管 PowerShell 在自动化和导出列表方面功能非常强大,但 Windows 仍然提供 用于管理控制器的经典图形工具 应该知道这一点,并将其与命令路径结合起来。
第一个参考点是 设备管理器您可以通过右键单击“此电脑”并选择“管理”来访问此功能,或者更快捷地使用“开始”按钮的上下文菜单(Windows + X)。在那里,您将看到一个树状图,其中列出了系统上安装的所有硬件类别。
出现安装或操作问题的设备通常会显示 黄色警告图标双击其中任何一个,都会打开属性窗口,您可以在其中查看设备状态并访问“驱动程序”选项卡。
在该标签页中,您会找到以下选项: “驱动程序详细信息”、“更新驱动程序”、“回滚驱动程序”、“禁用”或“卸载”这些操作允许您查看驱动程序文件、搜索新版本、恢复到以前的版本、在不移除设备的情况下禁用设备,或从系统中完全移除驱动程序。
除了这些工具之外,Windows 还包含该命令。 DRIVERQUERY 从 命令提示 (CMD)。 跑步 driverquery 您将获得所有已安装驱动程序的列表,并且 driverquery /v 您将看到更详细的信息,例如内存使用情况、构建日期或状态。
driverquery 及其与 PowerShell 的关系
driverquery 命令非常灵活,并且允许 查看驾驶员状态的不同视图例如,如果您只想详细列出已签名的驱动程序,可以运行以下命令:
driverquery /si
此模式显示 已签名的司机以及其他有用信息 用于安全审计或完整性检查。您随时可以咨询。 driverquery /? 查看所有可用参数并根据您的需要调整输出。
driverquery 的优势之一是: 您可以使用 ConvertFrom-CSV 将其与 PowerShell 集成。如果将输出生成为 CSV 格式并通过管道传输,您将获得可在 PowerShell 中操作的对象。一个典型的例子是:
driverquery.exe /v /fo csv | ConvertFrom-CSV | Select-Object "Display Name", "Start Mode", "Paged Pool(bytes)", Path
用这个你结合 利用 PowerShell 数据操作的 driverquery 功能仅选择您感兴趣的列:显示名称、启动模式、分页内存和磁盘上的驱动程序路径。当您想要按特定类型筛选时,此功能非常有用,例如: 图形驱动程序.
需要注意的是,driverquery 和某些标准 WMI 查询主要关注的是 系统中注册的司机其中许多被装载到 引导 或通过注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 进行管理。某些在运行时动态注入的驱动程序可能不会出现在这些列表中。
使用 Get-WindowsDriver 从 PowerShell 列出驱动程序
对于更高级的场景,尤其是在使用 Windows 离线映像 (例如,已挂载的 WIM 文件),该 cmdlet 非常有用。 获取WindowsDriver它是可通过 PowerShell 访问的 DISM 工具的一部分。
此 cmdlet 允许您显示有关正在运行的 Windows 安装和挂载到文件夹中的映像的驱动程序包的信息。其主要语法分为两种主要使用模式: 离线和在线.
对于 离线镜像已挂载到文件夹中一般形式如下:
Get-WindowsDriver -Path "C:\offline"
要对抗正在运行的系统,您可以使用该参数。 -在线的:
Get-WindowsDriver -Online
不带其他参数,Get-WindowsDriver 返回第三方驱动程序列表 图像中存在。如果您添加修改器 -全部你还会看到Windows默认包含的默认驱动程序。
Get-WindowsDriver 的关键参数
最重要的参数之一是 -驱动程序这样你就可以指定 一个特定的 .inf 文件或一个包含 .inf 文件的文件夹 要获取这些驱动程序的详细信息。如果您指定一个文件夹,则会自动忽略无效驱动程序包中的 .inf 文件。
当您处理离线图像时,该参数 -路径 指定已挂载映像的根路径。如果 Windows 文件夹不在根级别,您可以使用 -Windows 目录 指定其所在的相对子文件夹。
参数 系统驱动器 它用于更特定的场景,例如在 Windows PE 环境下工作且启动管理器位于不同分区时。在这种情况下,它用于指定包含 BootMgr 文件的驱动器。
关于活动日志,参数 -LogPath 它可以让你定义日志文件的完整路径。如果不进行调整,则使用默认路径。 %WINDIR%\Logs\Dism\dism.log或者在 Windows PE 中,指的是 RAM 中的临时空间。同时, -LogLevel 决定日志的详细程度,其值范围从仅包含错误信息到包含调试信息。
最后,参数 -暂存目录 这是服务操作期间提取文件的临时文件夹。它必须是本地路径,并且操作完成后, 临时文件 它们会被自动移除,不留任何残留物。
Get-WindowsDriver 的实际示例
要快速查看当前 Windows 安装的所有驱动程序,您可以运行:
Get-WindowsDriver -Online -All
该命令将显示 所有驱动程序(包括系统驱动程序和第三方驱动程序) 存在于运行映像中。这是一种无需使用 WMI 或设备管理器即可查看已安装软件包的非常直接的方法。
如果你正在与一个 镜像已挂载到 C:\offline 如果您只想检查第三方驱动程序,可以执行以下操作:
Get-WindowsDriver -Path "C:\offline"
如果想要获取该镜像中特定 OEM 驱动程序的详细报告,只需指定 .inf 文件即可:
Get-WindowsDriver -Path "C:\offline" -Driver "OEM1.inf"
您甚至可以访问位于特定驱动程序路径中的 .inf 文件,例如:
Get-WindowsDriver -Path "C:\offline" -Driver "C:\drivers\Usb\Usb.inf"
在所有这些情况下, Get-WindowsDriver 返回对象 您可以将其传递给 Select-Object、Where-Object 或 Export-CSV 来筛选、排序或将信息导出为最适合您的格式。
PowerShell 和 SCCM:使用 Get-CMDriver 获取驱动程序目录
当你管理企业环境时 配置管理器(SCCM)您不仅对每台计算机上的驱动程序感兴趣,而且对 SCCM 维护的用于部署映像和程序包的集中式驱动程序目录也感兴趣。
在这种情况下,cmdlet 就派上了用场。 Get-CMDriver, 这适用于 从配置管理器管理的设备驱动程序中检索信息根据您要查询的内容,此 cmdlet 有多种签名:按名称、按数字标识符、按驱动程序包或按管理类别。
基本语法包括以下变体:
Get-CMDriver
Get-CMDriver -DriverPackageId <String>
Get-CMDriver -DriverPackageName <String>
Get-CMDriver -Id <Int32>
Get-CMDriver -InputObject <IResultObject>
通过这些参数,您可以将查询定向到 SCCM 目录,并按以下方式进行筛选: 驱动程序名称、标识符、关联软件包或管理类别 您已定义用于组织控制器的规则。
Get-CMDriver 示例
如果您知道某个驱动程序的名称,例如“Surface Serial Hub Driver”,则可以使用以下命令获取其详细信息:
Get-CMDriver -Name "Surface Serial Hub Driver"
当您需要检查多个名称前缀相同的驱动程序(例如整个 Surface 驱动程序系列),并且只想查看一些相关属性时,可以使用类似以下的方法:
Get-CMDriver -Fast -Name "Surface*" | Select-Object LocalizedDisplayName, DriverVersion, DriverDate
修饰符 -快速地 它减少了检索的信息量并加快了查询速度,这在大型目录中尤为明显。然后,使用 Select-Object, 你只需保留对你有用的列。 供您分析。
如果您管理管理类别(例如,“Surface”类别,用于将所有控制器分组),则可以像这样将类别和驱动程序检索链接起来:
$category = Get-CMCategory -Name "Surface"
Get-CMDriver -Fast -AdministrativeCategory $category
在这种情况下,您首先将类别存储在一个变量中,然后让 Get-CMDriver 将其返回给您。 与该类别关联的所有控制器这对于在 SCCM 中维护控制器的逻辑视图非常有用。
列出动态加载驱动程序时的限制
并非所有驱动程序的行为都相同。有一些工具可以解决这个问题,例如某些驱动程序套件中的工具。 Sysinternals(例如,Process Explorer 或 handle.exe)它会在执行时动态地将驱动程序注入内核,而不会像传统服务那样在启动时将其注册。
一个典型的例子是司机 procexp152.sys (或更早版本,例如 procexp113.sys),与 Process Explorer 相关联。此类驱动程序可能不会出现在标准查询中。 Get-WmiObject Win32_SystemDriver因为这些查询依赖于注册表服务(CurrentControlSet\Services)中的信息,并且通常主要反映系统加载的驱动程序。
同样, driverquery 可能不会列出所有动态注入的驱动程序因此,如果您正在调试由加载自身驱动程序的第三方工具引起的蓝屏死机或异常行为,则可能需要采用其他方法。
这些替代方案包括: 检查 内存转储 内核 使用 WinDbg 之类的工具,或者使用类似这样的实用程序 验证程序驱动程序验证器允许您选择要监视的驱动程序并检测不稳定行为,但图形界面提供的枚举选项比命令行版本更多,命令行版本侧重于查询和配置验证。
简而言之,对于一般库存管理和大多数行政需求而言, PowerShell、WMI 和 Get-WindowsDriver 已经能够很好地满足基本需求。但是,在调试热加载驱动程序的极端情况下,您需要借助内核分析工具。
使用 PowerShell 的 PSWindowsUpdate 更新驱动程序
除了列出驱动程序之外,许多管理员还使用 PowerShell 来执行其他操作。 通过以下方式自动更新驱动程序 Windows更新 还有 更新声卡驱动程序一种常用的方法是通过 PSWindowsUpdate 模块,该模块扩展了标准更新 cmdlet。
通常的流量会经过这里。 暂时启用已签名脚本的执行安装该模块,然后直接从微软服务器请求驱动程序更新。
一组典型的命令可能是:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Install-Module PSWindowsUpdate
Import-Module PSWindowsUpdate
Get-WindowsUpdate
Get-WindowsUpdate -MicrosoftUpdate -Category Driver -Install -AutoReboot
此序列启用当前会话的脚本执行,并安装和导入 PSWindowsUpdate 模块。 您查看有哪些更新可用。 最后,您请求通过 Microsoft 更新从“驱动程序”类别安装它们,以便在必要时允许系统自动重启。
您还可以使用命令来扩大范围,该命令会安装从 Microsoft Update 检测到的所有更新,并在无需干预的情况下重启系统,例如:
Get-WindowsUpdate -MicrosoftUpdate -Install -AutoReboot
这种工作方式在以下方面尤其实用: 大型球队公园这里需要对驱动程序版本进行标准化,而无需逐个更新。但是,始终建议事先准备好完整的驱动程序清单,并且在关键环境中,先在试点组中进行测试,然后再部署到整个组织。
对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。
