Как получить диск по его метке в PowerShell 5.0?

У меня есть autorun.inf файл со следующим содержимым на моем внешнем жестком диске:

[Autorun]
Label=MasterSword

Это маркирует мой внешний жесткий диск, как только он подключен как, MasterSword, Я хочу сохранить несколько сценариев и включить их в мой $profile поэтому они загружаются при запуске PowerShell или при повторном включении профиля (. $profile) у переводчика.

Как известно многим, использование жестко закодированной буквы диска для внешних дисков может приводить к изменению ссылки на эти сценарии внешнего жесткого диска при каждом изменении буквы диска, что приводит к сбою включения.

Итак, я думаю, у меня есть два вопроса:

  1. Как мне получить метку диска, которая была установлена ​​в autorun.inf?

  2. Как перевести эту метку диска в букву диска, чтобы я мог ссылаться на скрипты, хранящиеся на нем?

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

Другие вопросы по тегам