1

マウントポイントがたくさんあるExchangeサーバーがあります。データベースファイルへのパスを考えると、それらがどのボリュームにあるかを知る方法はありますか?問題は、それらが通常、ボリュームマウントポイントではなく、ツリーのさらに下にあることです。私はPowershellを使用しているので、できればWMIを使用するソリューションが必要ですが、任意の.NETまたはCOMオブジェクトを使用することもできます。

4

2 に答える 2

2

PSCX includes a Get-ReparsePoint cmdlet:

C:\temp> Get-ReparsePoint d | ft -auto

Target                                           Path      ReparsePointTag
------                                           ----      ---------------
\??\Volume{a5908e7a-eca5-11dd-be98-005056c00008} C:\temp\d      MountPoint

You can map volume GUIDs to familiar drive names using the registry:

Get-ItemProperty HKLM:\SYSTEM\MountedDevices

[...]
\DosDevices\D:                                   : {22, 35, 171, 65...}
[...]
\??\Volume{a5908e7a-eca5-11dd-be98-005056c00008} : {22, 35, 171, 65...}

Putting things together, we can get the serial # of the physical drive that's mounted at c:\temp\d:

$guid = (Get-ReparsePoint d).target
$serial = (get-itemproperty HKLM:\SYSTEM\MountedDevices).$guid

You can compare that serial against the serial numbers of the other logical volumes such as the ones with DOS letters.

> function ArrayEqual([psobject[]]$arr1, [psobject[]]$arr2) 
      { @(Compare-Object $arr1 $arr2 -sync 0).Length -eq 0 }

> (gi HKLM:\SYSTEM\MountedDevices).property | ?{ $_ -like "\dos*" } | 
      ?{ ArrayEqual$serial (gp HKLM:\SYSTEM\MountedDevices).$_ }

\DosDevices\D:

See Keith Hill's blog for an explanation of the array comparison function.

For completeness, note this does NOT seem to be the same serial reported by COM...

> $comSerial = (new-object -com scripting.filesystemobject).getdrive("d")
> [bitconverter]::GetBytes($comSerial)
18
208
242
202
于 2009-08-03T21:25:20.920 に答える
1

ReparsePoint属性を発見しました。

現在のディレクトリを取得したら、ルートに到達して途中でReparsePointsを確認するまで、ツリーを上に移動できます。

$dbDir = (get-item (Get-MailboxDatabase $db).edbfilepath).directory
$dbDir
if($dbdir.parent){
  #todo make this recursive
}

#test if it's a reparse point.    
if ($dbdir.attributes -band [System.IO.FileAttributes]::ReparsePoint ){
  #it's a mountpoint.
}

ここから、「mountvol / L」ツール、またはより適切なWMIアソシエーションクラスWin32_MountPointとがありWin32_Volumeます。

少し複雑ですが、「私はどの音量になっているのか」と尋ねる簡単な方法がわかりません。すべてをまとめたら、完全な説明を投稿します。

編集-詳細はこちら:http ://slipsec.com/blog/?p = 126

于 2009-08-03T22:43:29.937 に答える