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

如何在PowerShell中提取USB设备的VID、PID及IFn并正确运用哈希表

PowerShell实现类lsusb的USB设备VID/PID/接口号提取

问题说明

需要在PowerShell中列出已连接且活跃的USB设备的VID、PID以及接口号(命名为IFn),实现类似Unix系统lsusb工具的功能。当前代码能筛选出目标设备,但提取VID时返回的是匹配成功与否的布尔值,而非实际的VID字符串,同时需要新增PID和IFn列(IFn对应InstanceId中MI_xx部分的xx,该部分可能不存在)。

解决方案

核心思路是利用PowerShell的-match操作符结合正则捕获组,匹配后通过$matches哈希表提取对应字段值。正则表达式需兼容两种InstanceId格式:带MI_xx和不带MI_xx的情况。

完整代码如下:

Get-PnpDevice -PresentOnly | 
    Where-Object { $_.Class -match 'USB' -and $_.InstanceId -match '^USB\\VID_' } |
    Select-Object Status,
        @{n='VID'; e={ if ($_.InstanceId -match 'VID_(?<vid>[0-9A-F]{4})') { $matches['vid'] } }},
        @{n='PID'; e={ if ($_.InstanceId -match 'PID_(?<pid>[0-9A-F]{4})') { $matches['pid'] } }},
        @{n='IFn'; e={ if ($_.InstanceId -match 'MI_(?<ifn>[0-9]{2})') { $matches['ifn'] } else { '-' } }},
        Class, FriendlyName, Manufacturer |
    Format-Table -AutoSize

代码解释

  1. 筛选逻辑优化:将Where-Object条件改为匹配^USB\\VID_,直接过滤出带有VID的USB设备,排除根集线器这类无VID/PID的设备。
  2. VID/PID提取:每个计算属性中先执行正则匹配,匹配成功后从$matches中取出对应的捕获组值($matches['vid']/$matches['pid'])。
  3. IFn处理:正则匹配MI_(?<ifn>[0-9]{2}),匹配成功则返回接口号,否则返回-表示无该字段。

示例输出

Status VID  PID  IFn Class     FriendlyName           Manufacturer
------ ---  ---  --- -----     ------------           ------------
OK     0BDA 2838 -   USBDevice RTL2838UHIDIR          Realtek Semiconductor Corp.
OK     30C9 00AC -   USB       USB Composite Device   (Standard USB Host Controller)
OK     30C9 00AC 02  USBDevice APP Mode               WinUsb Device

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:22:34