使用 InstanceID 禁用/启用 PnP 设备的脚本 - 但 ID 会在重启时发生变化

使用 InstanceID 禁用/启用 PnP 设备的脚本 - 但 ID 会在重启时发生变化

我有一个工作脚本,可以使用各自的 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

相关内容