Время от времени Windows (10) меняет назначенные буквы дисков моих двух подключенных устройств USB типа 3. Поэтому вместо того, чтобы иметь J: с меткой «keedrive» и V: с меткой «вторичный», Windows иногда меняет их местами, J: становится «вторичным», а V: «keedrive». Я пытаюсь создать пакетный сценарий, который проверит, изменилась ли буква диска, и если да, сбросит их, как они были.
В настоящее время мне приходится вручную переназначать буквы с помощью утилиты Diskpart.
Я читал о Как запустить скрипт PowerShell из командного файла и Как зафиксировать вывод в переменную из внешнего процесса в PowerShell, пытаясь получить работающий скрипт. Пока что я увяз на уровне получения вывода команды PowerShell в переменную, не зная, как задать условие проверки букв дисков на основе DeviceID и впоследствии переназначить буквы соответственно. Пожалуйста помоги. Заранее спасибо.
Вот команды PowerShell, которые я придумал
Get-CimInstance -ClassName CIM_StorageVolume | Format-Table -Property DeviceID, DriveLetter, Label | Tee-Object - переменная UsBDrvLetters
$Drive = Get-CimInstance -ClassName Win32_Volume -Filter "DeviceID = '<YourDeviceID>'"
$Drive | Set-CimInstance -Property @{DriveLetter ='<DesiredLetter>:'}
Первая команда возвращает объект CimInstance, а вторая передает его в set-CimInstance.
Еще почитать на эту тему:
Https://devblogs.microsoft.com/powershell-community/change-drive-letters-and-labels-via-powershell/
Наконец-то я заработал скрипт, хотя и использовал другое свойство (SerialNumber) класса Win32_Volume для фильтрации.
$Drive = Get-CimInstance -ClassName Win32_Volume -Filter 'Серийный номер вроде "6316615927"'
$Драйв | Set-CimInstance -Property @{DriveLetter = 'G:'}
Фильтрация также работает со свойством «Метка».
Мне все еще любопытно / смущено, почему я не могу фильтровать с помощью свойства «DeviceID»; поэтому я буду очень рад увидеть решение для этого.
Спасибо.
Здравствуйте, ironcheese. Спасибо за ваш вклад. У меня возникли трудности с фильтрацией на основе «DeviceID», PowerShell выдает ошибку «Неверный запрос», когда я помещаю «DeviceID» в этот формат 1b01-11e8-a051-40e36098bbd3}\'" И если я избавлюсь от \\ и просто введу {8e41d0b6-1b01-11e8-a051-40e36098bbd3} следующий $Drive | Set-CimInstance -Property @{DriveLetter ='Z:'} ничего не сделает. Спасибо