如何映射哪个卷位于Windows的哪个分区?

问题:我需要找出哪个卷对应于什么分区(s)对应于什么磁盘在一个非常有效的脚本能够庄园。 我知道如何对应哪个分区对应于哪个磁盘,因为磁盘i​​d直接在简单的wmic查询的结果中。 但是,问题的第一部分是比较困难的。 如何关联哪个卷属于哪个分区?

有没有一种方法,使用wmic,PowerShell,cmd提示,反向工程哪个卷映射到哪个分区,可以在所有当前支持的Windows Server版本(Windows Server 2008 R2 – Windows Server 2016)上运行?

如果是的话,这个查询将如何看?

使用diskpart获取信息不是一个选项。 虽然它可以用来编写磁盘操作脚本,但是使用diskpart作为返回磁盘configuration信息的工具是非常糟糕的。 Diskpart输出是不可分析的。

    一个可能的解决scheme是以下Power Shell脚本。 输出应该是JSON格式。 这个解决scheme的问题在于它依赖于get-partition cmdlet。 这个cmdlet是在windows 2008R2之后引入的。 如果将get-partition cmdlet移植到windows 2008R2,或者如果我发现一个解决scheme可以在Windows 2008R2上执行相同的操作,这将作为解决scheme。 虽然不是一个完整的解决scheme,但并不适合作为评论。

    $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 "}" 

    我目前无法发表评论,但是这似乎非常接近您的解决scheme。 我发现WMI Tasks中的文档标题为“…检测哪个驱动器号与逻辑磁盘分区关联?” 在VBScript中。

    请注意:我并不十分精通VBScript,所以我不能说下面的方法是多么灵活和可修改的,但是我相信它具有修改一个新的脚本所需的所有信息,这个脚本可以根据你的喜好进行parsing。

    来源: https : //msdn.microsoft.com/en-us/library/aa394592(v=vs.85).aspx#code-snippet-11

     ComputerName = "." Set wmiServices = GetObject ( _ "winmgmts:{impersonationLevel=Impersonate}!//" & ComputerName) ' Get physical disk drive Set wmiDiskDrives = wmiServices.ExecQuery ( "SELECT Caption, DeviceID FROM Win32_DiskDrive") For Each wmiDiskDrive In wmiDiskDrives WScript.Echo "Disk drive Caption: " & wmiDiskDrive.Caption & VbNewLine & "DeviceID: " & " (" & wmiDiskDrive.DeviceID & ")" 'Use the disk drive device id to ' find associated partition query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" _ & wmiDiskDrive.DeviceID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition" Set wmiDiskPartitions = wmiServices.ExecQuery(query) For Each wmiDiskPartition In wmiDiskPartitions 'Use partition device id to find logical disk Set wmiLogicalDisks = wmiServices.ExecQuery _ ("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" _ & wmiDiskPartition.DeviceID & "'} WHERE AssocClass = Win32_LogicalDiskToPartition") For Each wmiLogicalDisk In wmiLogicalDisks WScript.Echo "Drive letter associated" _ & " with disk drive = " _ & wmiDiskDrive.Caption _ & wmiDiskDrive.DeviceID _ & VbNewLine & " Partition = " _ & wmiDiskPartition.DeviceID _ & VbNewLine & " is " _ & wmiLogicalDisk.DeviceID Next Next Next 

    当我testing这个脚本时,我在WScript.Echo对话框中获得所有请求的信息。 作为例子,在我的系统上,对话框显示: VBScript对话框输出