PSCX включает командлет Get-ReparsePoint:
C:\temp> Get-ReparsePoint d | ft -auto
Target Path ReparsePointTag
------ ---- ---------------
\??\Volume{a5908e7a-eca5-11dd-be98-005056c00008} C:\temp\d MountPoint
Вы можете сопоставить GUID тома с известными именами дисков, используя реестр:
Get-ItemProperty HKLM:\SYSTEM\MountedDevices
[...]
\DosDevices\D: : {22, 35, 171, 65...}
[...]
\??\Volume{a5908e7a-eca5-11dd-be98-005056c00008} : {22, 35, 171, 65...}
Собрав все вместе, мы можем получить серийный номер физического диска, который смонтирован в c: \ temp \ d:
$guid = (Get-ReparsePoint d).target
$serial = (get-itemproperty HKLM:\SYSTEM\MountedDevices).$guid
Вы можете сравнить этот серийный номер с серийными номерами других логических томов, например, с буквами DOS.
> 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:
См. Блог Кейта Хилла для объяснения функции сравнения массивов.
Для полноты обратите внимание, что это НЕ тот же самый серийный номер, о котором сообщает COM ...
> $comSerial = (new-object -com scripting.filesystemobject).getdrive("d")
> [bitconverter]::GetBytes($comSerial)
18
208
242
202