如何映射哪个卷驻留在 Windows 中的哪个分区上?

Rus*_*ber 5 windows partition wmi disk-volume

问题:我需要弄清楚哪个卷对应哪个分区,哪个分区对应于一个非常有效的脚本庄园中的哪个磁盘。我知道如何对应哪个分区对应哪个磁盘,因为磁盘i​​d直接在一个简单的wmic查询的结果中。然而,问题的第一部分更加困难。如何关联哪个卷属于哪个分区?

有没有办法使用 wmic、PowerShell、cmd 提示符对哪个卷映射到哪个分区进行逆向工程,这适用于所有当前支持的 Windows Server 版本(Windows Server 2008R2 - Windows Server 2016)?

如果是这样,这个查询看起来如何?

使用 diskpart 获取信息不是一种选择。虽然它可以用来编写磁盘操作的脚本,但是使用 diskpart 作为返回有关磁盘配置信息的工具是很糟糕的。Diskpart 输出不可解析。

Rus*_*ber 1

一种可能的解决方案是以下 power shell 脚本。输出应为 JSON 格式。此解决方案的问题在于它依赖于 get-partition cmdlet。该cmdlet是在Windows 2008R2之后引入的。如果要将 get-partition cmdlet 移植到 Windows 2008R2,或者如果我找到了可以在 Windows 2008R2 上执行相同操作的解决方案,则这将作为一种解决方案。虽然不是完整的解决方案,但它不适合作为评论。

$CimPartInfo = get-partition
        "{"
        foreach ($CimPart in $CimPartInfo) {
            if ($CimPart.Guid -eq $null) {
                $PartGUID = [regex]::match($CimPart.AccessPaths, 'Volume({[^}]+})').Groups[1].Value
                }
             else {
                $PartGUID = $CimPart.Guid
                }
            "`"$PartGUID`": {"
            "`"DiskId`": $($CimPart.DiskNumber),"
            "`"PartitionId`": $($CimPart.PartitionNumber),"
            "`"Type`": `"$($CimPart.Type)`","
            "`"Size`": $($CimPart.Size),"
            "`"Offset`": $($CimPart.Offset),"
            "`"GUID`": `"$($CimPart.Guid)`","
            $x = $CimPart.IsBoot
            "`"Bootable`": $($x.ToString().ToLower()),"
            "`"Status`": `"$($CimPart.OperationalStatus)`""
            if ($CimPart -eq $CimPartInfo[-1]){ "}"}
            else {"},"}
            } #foreach CimPart
        "}"
Run Code Online (Sandbox Code Playgroud)