1

在我的环境中,我有很多挂载点驱动器(以下称为 MPD),为了简化我的问题,假设我有一个全名是

d:\data\DBA\Perf\abc.sql

在这种情况下,d:\data 实际上是一个 MPD,但我们不知道它的面值。(即它可以是 D:\ 驱动器,带有一个名为 \data\DBA 的文件夹)

如何使用 PowerShell 从该文件全名中找出 D:\Data 是 MPD?

我的环境是 Windows 2012 R2 + PowerShell V5。

我最初的解决方案是查找所有 MP 驱动器(我有 10 多个这样的 MPD,例如 d:\Log、e:\backup、d:\MP\Backup 等),然后尝试遍历所有 MPD 以查找是否有 MPD name 包含在文件的全名中。如果是这样,我知道 abc.sql 在 MPD 中。

我只是想知道是否有更好的解决方案,例如如何找到文件所在的挂载点?. 这个解决方案是针对 Linux 的,但是这个解决方案的关键点是用os.path.ismount(path)测试路径中包含的每个目录。

我们可以在 Windows 中有类似的解决方案吗?或者您的大师可能在 Windows 中有更好的解决方案?

TIA,

杰夫姚

4

1 回答 1

2

文件/目录对象的使用LinkTypeTarget属性,并按照自己的方式工作:

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'
路径目标类型    
---- ------ ----    
D:\lost\kill\!shared\mv {D:\lost\kill\mv} 交界处
D:\丢失{卷{b2cd25bc-98e0-4cb1-bf51-f090f8dfda43}\}结
于 2017-06-30T20:28:23.120 回答