【问题标题】:How do we get a drive by its label in PowerShell 5.0?我们如何在 PowerShell 5.0 中通过其标签获取驱动器?
【发布时间】:2017-11-10 17:36:38
【问题描述】:

我的外置硬盘上有一个autorun.inf 文件,其中包含以下内容:

[Autorun]
Label=MasterSword

这会将我的外置硬盘插入后标记为MasterSword。我想在上面存储一些脚本并将它们包含在我的$profile 中,以便在 PowerShell 启动或在解释器中重新包含配置文件 (. $profile) 时加载它们。

众所周知,对外部驱动器使用硬编码驱动器号会导致每次驱动器号更改时更改对这些外部硬盘驱动器脚本的引用,从而导致包含失败。

所以我想我有两个问题:

  1. 如何获取在autorun.inf 中设置的驱动器标签?

  2. 如何将该驱动器标签转换为驱动器号,以便引用存储在其上的脚本?

【问题讨论】:

    标签: windows powershell powershell-5.0


    【解决方案1】:

    我做了更多的研究并想出了这个小sn-p:

    回答#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中。

    【讨论】:

      【解决方案2】:

      你可以试试:

      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"
      

      【讨论】:

      • 此解决方案不起作用。示例中带标签的驱动器没有说明。请使用$psdrive = Get-PSDrive$psdrive.Description自己测试。
      • 啊,是的,您自己的答案使用Get-Volume 看起来更准确。
      【解决方案3】:

      这是我自己使用的对优秀SP答案的修改。

      我让脚本按名称查找插入的 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

      【讨论】:

        猜你喜欢
        • 2014-10-23
        • 2011-02-20
        • 1970-01-01
        • 2012-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多