使用 Powershell,如何在给定文件全名的情况下查找挂载点驱动器
With Powershell, how to find mount point drive given a file full name
在我的环境中,我有很多安装点驱动器(以下简称 MPD),为了简化我的问题,假设我有一个全名为
的文件
d:\data\DBA\Perf\abc.sql
在这种情况下,d:\data 实际上是一个 MPD,但我们无法仅从其面值得知。 (即它可以是 D:\ 驱动器,其中包含一个名为 \data\DBA 的文件夹)
如何使用 PowerShell 从这个文件全名中找出 D:\Data 是一个 MPD?
我的环境是Windows2012 R2 + PowerShell V5.
我最初的解决方案是找到所有 MP 驱动器(我有 10 多个这样的 MPD,如 d:\Log、e:\backup、d:\MP\Backup 等),然后尝试遍历所有MPD 查找 MPD 名称是否包含在文件的全名中。如果是这样,我知道 abc.sql 在 MPD 中。
我只是想知道是否有更好的解决方案,例如 How to find the mountpoint a file resides on?。这个方案是针对Linux的,但是这个方案的重点是要测试路径中包含的每一个目录都是os.path.ismount(path).
我们可以在 windows 中找到类似的解决方案吗?或者各位大师可能在 Windows?
中有更好的解决方案
TIA,
Jeff_yao
使用 file/directory 对象的 LinkType
和 Target
属性并找到根:
function Get-ReparsePoints($path) {
try { $file = Get-Item -literal $path } catch {}
while ($file) {
if ($file.LinkType) {
[PSCustomObject]@{
path = $file.FullName
target = $file.Target
type = $file.LinkType
}
}
$file = if ($file.Parent) { $file.Parent } else { $file.Directory }
}
}
在 PowerShell 5 中测试:
Get-ReparsePoints 'D:\lost\kill\!shared\mv\Lindsey Stirling\Radioactive.mp4'
path target type
---- ------ ----
D:\lost\kill\!shared\mv {D:\lost\kill\mv} Junction
D:\lost {Volume{b2cd25bc-98e0-4cb1-bf51-f090f8dfda43}\} Junction
在我的环境中,我有很多安装点驱动器(以下简称 MPD),为了简化我的问题,假设我有一个全名为
的文件d:\data\DBA\Perf\abc.sql
在这种情况下,d:\data 实际上是一个 MPD,但我们无法仅从其面值得知。 (即它可以是 D:\ 驱动器,其中包含一个名为 \data\DBA 的文件夹)
如何使用 PowerShell 从这个文件全名中找出 D:\Data 是一个 MPD?
我的环境是Windows2012 R2 + PowerShell V5.
我最初的解决方案是找到所有 MP 驱动器(我有 10 多个这样的 MPD,如 d:\Log、e:\backup、d:\MP\Backup 等),然后尝试遍历所有MPD 查找 MPD 名称是否包含在文件的全名中。如果是这样,我知道 abc.sql 在 MPD 中。
我只是想知道是否有更好的解决方案,例如 How to find the mountpoint a file resides on?。这个方案是针对Linux的,但是这个方案的重点是要测试路径中包含的每一个目录都是os.path.ismount(path).
我们可以在 windows 中找到类似的解决方案吗?或者各位大师可能在 Windows?
中有更好的解决方案TIA,
Jeff_yao
使用 file/directory 对象的 LinkType
和 Target
属性并找到根:
function Get-ReparsePoints($path) {
try { $file = Get-Item -literal $path } catch {}
while ($file) {
if ($file.LinkType) {
[PSCustomObject]@{
path = $file.FullName
target = $file.Target
type = $file.LinkType
}
}
$file = if ($file.Parent) { $file.Parent } else { $file.Directory }
}
}
在 PowerShell 5 中测试:
Get-ReparsePoints 'D:\lost\kill\!shared\mv\Lindsey Stirling\Radioactive.mp4'
path target type ---- ------ ---- D:\lost\kill\!shared\mv {D:\lost\kill\mv} Junction D:\lost {Volume{b2cd25bc-98e0-4cb1-bf51-f090f8dfda43}\} Junction