2017-06-30 14 views
1

私の環境では、私の質問を単純化するために、マウントポイントドライブ(以下、MPD)をたくさん持っています。私はフルネームがPowershellを使用して、ファイルフルネームでマウントポイントドライブを見つける方法

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

この場合、d:\ dataは実際にはMPDですが、その額面からわかりません。 (つまり、\ data \ DBAというフォルダを使用してD:\ドライブにすることができます)

D:\ DataはPowerShellでこのファイルのフルネームのMPDですか?

私の環境はWindows 2012 R2 + PowerShell V5です。

私の初期の解決策は、すべてのMPドライブ(d:\ Log、e:\ backup、d:\ MP \ Backupなどの10以上のMPDがあります)を見つけてから、 MPD名がファイルのフルネームに含まれているかどうかを調べます。もしそうなら、私はabc.sqlがMPDにあることを知っています。

もっと良い解決策があるかどうかは、このHow to find the mountpoint a file resides on?のようなものですか?このソリューションはLinux用ですが、このソリューションのポイントは、パスに含まれる各ディレクトリをos.path.ismount(パス)でテストすることです。

Windowsでも同様のソリューションを使用できますか?あるいは、あなたはWindowsでもっと良い解決策を持っているかもしれませんか?

TIA、

Jeff_yao

答えて

2

使用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 
+0

これは本当に素晴らしいし、多くの助けになります。あなたは本当の教祖です。 – jyao

+0

@ wOxxOm、もしあなたが気にしないのであれば、LinkType/TargetプロパティはPS V5でしか使えないようですね。私はPowerShell V4でスクリプトをテストしているので、PS V5ではすべて正常に動作しているように見えますが、動作していないようです。 :-) – jyao

+0

@jyao、そうだね、この機能はPS5に追加されたようだ。 – wOxxOm

関連する問題