如何在powershell中从USB设备中提取VID PID?

问题描述 投票:0回答:1

我正在尝试使用 powershell 列出已连接和活动 USB 设备的

VID:PID
,希望在基于 *nix 的操作系统中获得类似于
lsusb
的内容。

我可以获得包含我感兴趣的设备的表格,但我无法独立提取

VID
PID
bInterfaceNumber
(我称之为
IFn
)并显示值。输出的形式如下:

USB\VID_v(4)&PID_d(4)&MI_z(2)

地点:

  • z(2)
    是从“bInterfaceNumber”中提取的接口号 相应接口描述符的字段,大概在
    [00-99]
    范围内。

我尝试过的代码:

(Get-PnpDevice -PresentOnly | Where-Object { $_.Class -match 'USB' -AND $_.InstanceId -match '^USB'}) | Select-Object Status, @{n="VID"; e={($_.InstanceId -match '.*VID_(?<vid>[0-9A-F]{4})')}},Class,FriendlyName,InstanceId,Manufacturer | ft -AutoSize

# Output
Status   VID Class     FriendlyName           InstanceId                                              Manufacturer
------   --- -----     ------------           ----------                                              ------------
OK     False USB       USB Root Hub (USB 3.0) USB\ROOT_HUB30\4&1CDD8EC&0&0                            (Standard USB HUBs)
OK     False USB       USB Root Hub (USB 3.0) USB\ROOT_HUB30\4&7B32CF2&0&0                            (Standard USB HUBs)
OK      True USBDevice RTL2838UHIDIR          USB\VID_0BDA&PID_2838\00000001                          Realtek Semiconductor Corp.
OK      True USB       USB Composite Device   USB\VID_30C9&PID_00AC\01.00.00                          (Standard USB Host Controller)
OK      True USBDevice APP Mode               USB\VID_30C9&PID_00AC&MI_02\6&195555CF&2&0002           WinUsb Device

但我想要实际的 VID,而不仅仅是匹配。此外,我还需要 2 列来显示 PID 和 IFn。
RegEx 是这样的,但不确定,因为

MI_nn
可能不存在:

$_.InstanceId -match '.*VID_(?<vid>[0-9A-F]{4})&PID_(?<pid>[0-9A-F]{4})&MI_(?<ifn>[0-9]{2}).*'


问:如何将其与哈希一起使用,然后在表达式中正确使用?

windows powershell
1个回答
0
投票

当您对单个输入字符串使用

-match
(或其变体)时,
$Matches
自动变量会在当前范围内更新,并填充任何捕获的值 - 因此使用它来获取 VID 值:

@{Name = 'VID'; Expression = { if ($_.InstanceId -match '.*VID_(?<vid>[0-9A-F]{4})'){ $Matches['vid'] }}
© www.soinside.com 2019 - 2024. All rights reserved.