如何通过PowerShell获取PnP设备(如摄像头)的Capabilities并检查指定标识
用PowerShell/WMI检查PnP设备(如摄像头)的Capabilities
核心解决方案:按位与操作判断特定能力
DEVPKEY_Device_Capabilities返回的UInt32值是多个CM_DEVCAP_xxx标志的按位或结果,要判断某个特定能力是否存在,只需将该值与目标标志的数值做**按位与(-band)**操作:若结果等于目标标志值,则该能力启用。
具体步骤(以CM_DEVCAP_SECUREDDEVICE为例)
确定目标标志的数值
根据微软定义,CM_DEVCAP_SECUREDDEVICE对应的十六进制是0x80,十进制为128。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。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
相关产品推荐
相关产品推荐

