Как получить диск по его метке в PowerShell 5.0?
У меня есть autorun.inf
файл со следующим содержимым на моем внешнем жестком диске:
[Autorun]
Label=MasterSword
Это маркирует мой внешний жесткий диск, как только он подключен как, MasterSword
, Я хочу сохранить несколько сценариев и включить их в мой $profile
поэтому они загружаются при запуске PowerShell или при повторном включении профиля (. $profile
) у переводчика.
Как известно многим, использование жестко закодированной буквы диска для внешних дисков может приводить к изменению ссылки на эти сценарии внешнего жесткого диска при каждом изменении буквы диска, что приводит к сбою включения.
Итак, я думаю, у меня есть два вопроса:
Как мне получить метку диска, которая была установлена в
autorun.inf
?Как перевести эту метку диска в букву диска, чтобы я мог ссылаться на скрипты, хранящиеся на нем?
2 ответа
Я провел немного больше исследований и придумал этот небольшой фрагмент:
Чтобы ответить #1:
$scriptDrive = Get-Volume -FileSystemLabel MasterSword
Чтобы ответить № 2:
$scriptDriveLetter = $scriptDrive.DriveLetter
И вместе они будут:
$scriptDrive = Get-Volume -FileSystemLabel MasterSword
$scriptDriveLetter = $scriptDrive.DriveLetter
Или для другой интерпретации:
$scriptDriveLetter = (Get-Volume -FileSystemLabel Mastersword).DriveLetter
Где хранится необходимая буква диска $scriptDriveLetter
,
Вы можете попробовать:
Get-PSDrive | Where-Object {$_.Description -eq "MasterSword"}
Это вернет объект, такой как:
Name : E
Description : MasterSword
Provider : Microsoft.PowerShell.Core\FileSystem
Root : E:\
CurrentLocation : Scripts
Таким образом, предполагая, что ваши скрипты находятся в папке "Scripts", вы можете найти их с помощью:
$Root = (Get-PSDrive | Where-Object {$_.Description -eq "MasterSword"}).Root
$Path = Join-Path $Root "Scripts"
Вот модификация ответа ExcellentSP, которую я использовал для себя.
У меня есть сценарий, который ищет подключенный usb по имени и меняет букву диска на заранее определенную букву диска:
$scriptDrive = Get-Volume -FileSystemLabel "mastersword"
Get-Partition -DriveLetter ($scriptDrive.DriveLetter) | Set-Partition -NewDriveLetter W
Вы можете заменить -DriveLetter
с участием -DriveNumber
также зависит от вашего использования.
Но это произошло только потому, что я был ленив и не хотел сильно изменять свой старый сценарий.
Скорее всего, лучший способ сделать это:
$scriptDrive = Get-Volume -FileSystemLabel "mastersword"
$drive = $scriptDrive.DriveLetter
Затем вы должны использовать $ drive для любых путей или каталогов на этом диске. пример:$drive:\folder\picture.jpg