我们如何在 PowerShell 5.0 中通过标签获取驱动器?
How do we get a drive by its label in PowerShell 5.0?
我的外置硬盘上有一个 autorun.inf
文件,其中包含以下内容:
[Autorun]
Label=MasterSword
插入后,这会将我的外部硬盘驱动器标记为 MasterSword
。我想在上面存储一些脚本并将它们包含在我的 $profile
中,以便在 PowerShell 启动时或在解释器中重新包含配置文件 (. $profile
) 时加载它们。
正如许多人所知,对外部驱动器使用硬编码驱动器号会导致每次驱动器号更改时更改对这些外部硬盘驱动器脚本的引用,从而导致包含失败。
所以我想我有两个问题:
如何获取在 autorun.inf
中设置的驱动器标签?
如何将该驱动器标签转换为驱动器号以便我可以引用存储在其中的脚本?
你可以试试:
Get-PSDrive | Where-Object {$_.Description -eq "MasterSword"}
这将 return 一个对象,例如:
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"
我做了更多的研究并提出了这个小片段:
回答 #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
。
这是我对 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
我的外置硬盘上有一个 autorun.inf
文件,其中包含以下内容:
[Autorun]
Label=MasterSword
插入后,这会将我的外部硬盘驱动器标记为 MasterSword
。我想在上面存储一些脚本并将它们包含在我的 $profile
中,以便在 PowerShell 启动时或在解释器中重新包含配置文件 (. $profile
) 时加载它们。
正如许多人所知,对外部驱动器使用硬编码驱动器号会导致每次驱动器号更改时更改对这些外部硬盘驱动器脚本的引用,从而导致包含失败。
所以我想我有两个问题:
如何获取在
autorun.inf
中设置的驱动器标签?如何将该驱动器标签转换为驱动器号以便我可以引用存储在其中的脚本?
你可以试试:
Get-PSDrive | Where-Object {$_.Description -eq "MasterSword"}
这将 return 一个对象,例如:
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"
我做了更多的研究并提出了这个小片段:
回答 #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
。
这是我对 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