You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统下如何实现检测指定驱动是否已加载的PowerShell函数?

PowerShell 无系统修改的驱动加载状态检测实现

你当前使用verifier.exe的方案会临时修改系统驱动验证规则,不符合CI环境纯只读校验的要求,可直接通过WMI查询系统当前运行的内核驱动列表实现需求,全程仅做读取操作,不会修改任何系统配置。

最终实现代码

# 检查指定驱动是否已加载到内核
function Check-Driver {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$DriverName
    )
    # 兼容带.sys后缀和不带后缀的输入
    $cleanName = $DriverName.TrimEnd('.sys', [System.StringComparison]::OrdinalIgnoreCase)
    # 查询所有运行状态的系统驱动,忽略大小写匹配名称
    $matchedDriver = Get-CimInstance -ClassName Win32_SystemDriver | 
        Where-Object { 
            $_.State -eq 'Running' -and 
            ($_.Name.TrimEnd('.sys', [System.StringComparison]::OrdinalIgnoreCase) -eq $cleanName -or 
             $_.DisplayName.TrimEnd('.sys', [System.StringComparison]::OrdinalIgnoreCase) -eq $cleanName)
        }
    return $null -ne $matchedDriver
}

使用说明

调用时直接传入驱动名即可,支持带或不带.sys后缀:

# 返回True代表驱动已加载,False代表未加载
Check-Driver -DriverName "nvlddmkm"
Check-Driver -DriverName "acpi.sys"

该方案无需管理员权限即可运行,完全适配CI自动化校验场景。

备选兼容方案

如果运行环境WMI服务异常,可以使用系统内置sc.exe命令实现同样的只读校验:

function Check-Driver {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$DriverName
    )
    $cleanName = $DriverName.TrimEnd('.sys', [System.StringComparison]::OrdinalIgnoreCase)
    $queryResult = sc.exe query type= driver $cleanName 2>&1
    return $queryResult -match 'STATE.*\s+RUNNING'
}

内容的提问来源于stack exchange,提问作者Nick Banks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:48:02