我有一个工作脚本,可以使用各自的 InstanceID 禁用 4 个 USB 操纵杆
$pnpIds = 'HID\VID_0079&PID_0006\7&1699A0E&198&0000', 'HID\VID_0079&PID_0006\7&5438EB5&19D&0000', 'HID\VID_0079&PID_0006\7&390C5738&17D&0000','HID\VID_0079&PID_0006\7&2652A693&16C&0000'
foreach ($pnpId in $pnpids)
Disable-PnpDevice -InstanceId $pnpId -Confirm:$false
}
执行时一切正常,问题是重新启动后 ID 会发生变化。在“&”字符之间只有最后 3 个字符发生变化(HID\VID_0079&PID_0006\7&1699A0E&198&0000 其余保持不变。 无论如何都要使用通配符来表示这 3 个字符? 它使用字母和数字。
如果没有的话,有没有办法编写一个脚本来获取 USB 操纵杆的当前 InstanceID,然后使用我当前正在使用的脚本禁用/启用它们?这超出了我的能力范围。
答案1
你可以!最好的开始Get-PnpDevice
就是确保您仅选择您期望的设备:
# use * as a wildcard
Get-PnpDevice -InstanceId 'HID\VID_0079&PID_0006\7&1699A0E&*&0000'
# example output on my PC:
Status Class FriendlyName InstanceId
------ ----- ------------ ----------
OK Keyboard HID Keyboard Device HID\VID_0079...
OK Mouse HID-compliant mouse HID\VID_0079...
然后您可以使用基本相同的脚本(我猜测通配符的位置):
$pnpIds =
'HID\VID_0079&PID_0006\7&1699A0E&*&0000',
'HID\VID_0079&PID_0006\7&5438EB5&*&0000',
'HID\VID_0079&PID_0006\7&390C5738&*&0000',
'HID\VID_0079&PID_0006\7&2652A693&*&0000'
foreach ($pnpId in $pnpids) {
Get-PnpDevice -InstanceID $pnpId |
Where Status -Like 'OK' |
Disable-PnpDevice -Confirm:$false
}
您不能在中使用通配符Disable-PnpDevice
,但是它将要禁用任何连接到它的设备,包括多个设备的列表,因此请小心不要意外禁用任何东西。
Get-PnpDevice
如果更容易的话,-FriendlyName
也可以使用通配符进行搜索。-Class
答案2
你试过微软的 DevCon 实用程序[1] 吗?它支持通配符
devcon.exe find "USB\VID_3495&PID_00E0*"
USB\VID_3495&PID_00E0\123456789:USB 调试连接设备找到 1 个匹配的设备。
它支持许多命令,如禁用/启用。
[1]https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/devcon