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

如何通过PowerShell获取PnP设备(如摄像头)的Capabilities并检查指定标识

用PowerShell/WMI检查PnP设备(如摄像头)的Capabilities

核心解决方案:按位与操作判断特定能力

DEVPKEY_Device_Capabilities返回的UInt32值是多个CM_DEVCAP_xxx标志的按位或结果,要判断某个特定能力是否存在,只需将该值与目标标志的数值做**按位与(-band)**操作:若结果等于目标标志值,则该能力启用。

具体步骤(以CM_DEVCAP_SECUREDDEVICE为例)

  1. 确定目标标志的数值
    根据微软定义,CM_DEVCAP_SECUREDDEVICE对应的十六进制是0x80,十进制为128。

  2. PowerShell实现代码

    # 获取摄像头设备的Capabilities值
    $cameraCap = (Get-PnpDevice -PresentOnly -Class Camera | Get-PnpDeviceProperty -KeyName DEVPKEY_Device_Capabilities).Data
    
    # 定义目标能力的数值
    $SECURED_DEVICE_FLAG = 128
    
    # 按位与判断能力是否存在
    if (($cameraCap -band $SECURED_DEVICE_FLAG) -eq $SECURED_DEVICE_FLAG) {
        Write-Host "该摄像头具备CM_DEVCAP_SECUREDDEVICE能力"
    } else {
        Write-Host "该摄像头不具备CM_DEVCAP_SECUREDDEVICE能力"
    }
    

    针对你得到的数值164(二进制10100100),与128(二进制10000000)按位与结果为128,说明该摄像头已启用CM_DEVCAP_SECUREDDEVICE。

  3. WMI替代方案
    若需用WMI实现,可通过Win32_PnPEntity关联设备属性查询:

    # 获取摄像头设备实例
    $camera = Get-CimInstance Win32_PnPEntity -Filter "Present=TRUE AND ClassGuid='{ca3e7ab9-b4c3-4ae6-8251-579ef933890f}'"
    
    # 查询DEVPKEY_Device_Capabilities属性
    $capProperty = Get-CimInstance -Namespace root/cimv2 -Query "ASSOCIATORS OF {Win32_PnPEntity.DeviceID='$($camera.DeviceID)'} WHERE ResultClass=Win32_PnPDeviceProperty" | 
                   Where-Object KeyName -eq 'DEVPKEY_Device_Capabilities'
    
    $cameraCap = [UInt32]$capProperty.Data
    
    # 后续判断逻辑同PowerShell方法
    

常见CM_DEVCAP_xxx标志参考

  • CM_DEVCAP_REMOVABLE: 1 (0x01)
  • CM_DEVCAP_SURPRISEREMOVALOK: 32 (0x20)
  • CM_DEVCAP_HARDWAREDISABLED: 64 (0x40)
  • CM_DEVCAP_SECUREDDEVICE: 128 (0x80)
  • CM_DEVCAP_NONDYNAMIC: 256 (0x100)

内容的提问来源于stack exchange,提问作者Kapil Kalra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:42:41