You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Get-Partition无法返回系统所有分区?动态磁盘分区获取方案问询

解决动态磁盘下获取分区及关联Win32_Volume的问题

方法1:用Get-Volume+Get-Disk替代Get-Partition

Get-Partition确实仅支持基本磁盘,但Get-Volume可以识别所有卷(包括动态卷),并且自带AccessPaths属性,完全满足你的需求。通过DiskNumber字段可以直接关联到Get-Disk的磁盘信息,实现卷与磁盘的映射:

Get-Volume | 
    Where-Object { $_.DriveType -in 'Fixed', 'Removable' } |
    ForEach-Object {
        $disk = Get-Disk -Number $_.DiskNumber
        [PSCustomObject]@{
            VolumeLabel = $_.FileSystemLabel
            AccessPaths = $_.AccessPaths -join ';'
            DiskNumber = $disk.Number
            DiskType = $disk.DiskType
            DiskSizeGB = [math]::Round($disk.Size / 1GB, 2)
            FileSystem = $_.FileSystem
        }
    } | Format-Table -AutoSize

方法2:CIM关联查询实现Win32_Volume与磁盘绑定

如果需要直接使用WMI/CIM类,虽然Win32_Volume没有直接的磁盘关联字段,但可以通过CIM的关联类完成映射,同时保留AccessPaths:

Get-CimInstance Win32_Volume |
    Where-Object { $_.DriveType -eq 3 } | # 过滤固定磁盘
    ForEach-Object {
        $volume = $_
        # 获取卷对应的分区(动态卷可能无对应分区,需特殊处理)
        $partition = Get-CimInstance -Query "ASSOCIATORS OF {Win32_Volume.DeviceID='$($volume.DeviceID)'} WHERE ResultClass=Win32_DiskPartition"
        if ($partition) {
            $disk = Get-CimInstance -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} WHERE ResultClass=Win32_DiskDrive"
            $diskType = if ($disk.PartitionStyle -eq 'Dynamic') { 'Dynamic' } else { 'Basic' }
        } else {
            $disk = Get-CimInstance -Query "ASSOCIATORS OF {Win32_Volume.DeviceID='$($volume.DeviceID)'} WHERE ResultClass=Win32_DiskDrive"
            $diskType = 'Dynamic'
        }

        [PSCustomObject]@{
            VolumeDeviceID = $volume.DeviceID
            AccessPaths = $volume.AccessPaths -join ';'
            DiskModel = $disk.Model
            DiskSerial = $disk.SerialNumber
            DiskType = $diskType
        }
    }

方法3:diskpart辅助导出(适合超大规模磁盘场景)

当磁盘数量超过100块时,PowerShell cmdlet可能存在性能瓶颈,此时可以用diskpart导出完整的磁盘/卷列表,再结合Get-Volume补全AccessPaths:

  1. 创建diskpart脚本文件diskinfo.txt:
list volume
list disk
exit
  1. 在PowerShell中执行并解析:
# 导出diskpart输出
diskpart /s diskinfo.txt | Out-File diskpart_output.txt -Encoding utf8

# 解析卷信息并关联AccessPaths
$volumeData = Get-Content diskpart_output.txt | 
    Select-String "^  Volume" |
    ForEach-Object {
        $split = $_.Line -split '\s+' | Where-Object { $_ }
        $volume = Get-Volume -VolumeNumber $split[1]
        [PSCustomObject]@{
            VolumeNumber = $split[1]
            AccessPaths = $volume.AccessPaths -join ';'
            DiskNumber = $volume.DiskNumber
            FileSystem = $split[-3]
            Size = $split[-2]
        }
    }

$volumeData | Export-Csv -Path volume_disk_map.csv -NoTypeInformation

内容的提问来源于stack exchange,提问作者Hammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:33:26