Сценарий для отключения/включения PnP-устройства с использованием идентификаторов экземпляров - но идентификаторы меняются при перезагрузке

Сценарий для отключения/включения PnP-устройства с использованием идентификаторов экземпляров - но идентификаторы меняются при перезагрузке
Сценарий для отключения/включения PnP-устройства с использованием идентификаторов экземпляров - но идентификаторы меняются при перезагрузке - noaa @ Unsplash

У меня есть рабочий скрипт для отключения 4 usb-джойстиков с использованием их соответствующих идентификаторов InstanceID

$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 символов? Он использует буквы и цифры.

Если нет, есть ли способ написать скрипт, который будет получать текущие InstanceID для USB-джойстиков, а затем отключать/включать их с помощью скрипта, который я сейчас использую? Я не в своей тарелке...

Вы можете! Лучше всего начать просто с 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, если это проще.


NevaDev, 6 февраля 2023 г., 20:10