是否有 WMI 或 PowerShell 方式来获取即插即用设备(如网络摄像头)的功能?
我正在寻找一种编程方式来枚举或检查功能值,特别是
CM_DEVCAP_SECUREDDEVICE
(如下图所示)是否存在/适用于相机设备。
我能够获取属性密钥
DEVPKEY_Device_Capabilities
但是,根据Microsoft文档:
DEVPKEY_Device_Capability 的值是 CM_DEVCAP_Xxx 功能标志的按位或运算
这并没有给我足够的粒度来了解该特定功能是否可用(或者它是但我不明白吗?😅)。
Get-PnpDevice -PresentOnly -Class Camera | Get-PnpDeviceProperty -KeyName DEVPKEY_Device_Capabilities
InstanceId KeyName Type Data
---------- ------- ---- ----
USB\VID... DEVPKEY_Device_Capabilities UInt32 164
需要注意的是,我事先不知道我必须检查的设备/相机池中的设备是否肯定已启用(我也没有办法购买),所以我无法知道
的值DEVPKEY_Device_Capabilities
提前财产进行比较。
存储为
DEVPKEY_Device_Capabilities
的值是映射到 Cfgmgr32.h
中定义的功能的位字段 - 解析该值的最简单方法是使用 enum
属性定义 [Flags()]
类型,然后将值转换为:
[Flags()]
enum DeviceCapabilities {
LOCKSUPPORTED = 0x0001
EJECTSUPPORTED = 0x0002
REMOVABLE = 0x0004
DOCKDEVICE = 0x0008
UNIQUEID = 0x0010
SILENTINSTALL = 0x0020
RAWDEVICEOK = 0x0040
SURPRISEREMOVALOK = 0x0080
HARDWAREDISABLED = 0x0100
NONDYNAMIC = 0x0200
SECUREDEVICE = 0x0400
}
现在我们可以做:
PS ~> Get-PnpDevice -Class Camera -PresentOnly |Select FriendlyName,InstanceId,@{Name='Capabilities';Expression={($_ |Get-PnpDeviceProperty -KeyName DEVPKEY_Device_Capabilities).Data -as [DeviceCapabilities]}}
InstanceId FriendlyName Capabilities
---------- ------------ ------------
USB\VID... PC camera REMOVABLE, SILENTINSTALL, SUPRISEREMOVALOK