仅从PowerShell中的路径获取驱动器号

时间:2015-03-10 14:55:56

标签: powershell

我想在PowerShell中创建一个脚本,以帮助轻松翻译这样的路径:

H:\MyDoc.docx

进入真正的绝对路径,如下:

\\FileServer\UserShares\Organization\Department\Me\MyDoc.docx

在这种情况下,我在本地计算机上创建了一个将H:\指向\\FileServer\UserShares\Organization\Department\Me\的网络驱动器映射,但我需要轻松扩展映射路径以便与其他用户共享谁可能没有驱动器映射。

轻松获取驱动器的路径。

(Get-PSDrive H).DisplayRoot

但是,当我尝试编写一个更通用的脚本时,我会遇到一个问题,该脚本可以自动适应可能指向其他映射驱动器的路径(我确实有几个)。我正在弄清楚的是如何从给定路径中提取驱动器号。

我认为Split-Path会有所帮助,但它似乎只能将路径分开 - “父”和“叶” - 两者都不会只给出驱动器号。

有没有办法让只是来自PowerShell中给定路径的驱动器号?

注意:我需要这个用于指向文件文件夹的路径。

4 个答案:

答案 0 :(得分:9)

从PowerShell 3.0开始,Split-Path现在提供-Qualifier选项:

-Qualifier
   Indicates that this cmdlet returns only the qualifier of the specified path.
   For the FileSystem or registry providers, the qualifier is the drive of the
   provider path, such as C: or HKCU:.

使用OP的例子:

PS C:\> Split-Path -Path "H:\MyDoc.docx" -Qualifier

返回H:

答案 1 :(得分:8)

您可以使用FileInfo对象的PSDrive属性:

(Get-Item .\your\path\to\file.ext).PSDrive.Name

答案 2 :(得分:2)

这是一个适用于大多数情况的解决方案,但它有点“hacky”,因为它只是返回字符串的一部分而不是文件路径的特定组件。


假设驱动器由单个字母表示(大多数,如果不是全部,则表示网络映射),您可以通过将路径作为字符串处理而不是尝试将其视为多部分来解决问题“路径“对象。这使问题变得非常简单,因为驱动器号始终是字符串中的第一个字符,PowerShell将字符串作为单个字符的数组处理。

例如,如果脚本在$MyPath中存储提供的路径,那么获取驱动器号的方式就是:

$DriveLetter = $MyPath[0]

答案 3 :(得分:2)

((Get-Location).Path.Split(":")).Get(0)

Returns just the provider.  Output:

PS SQLSERVER:\> ((Get-Location).Path.Split(":")).Get(0)

SQLSERVER

PS F:\Backups> ((Get-Location).Path.Split(":")).Get(0)

F

etc...