首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >powershell一键三连输出disk instanceid、磁盘序号、盘符

powershell一键三连输出disk instanceid、磁盘序号、盘符

原创
作者头像
Windows技术交流
修改2025-02-17 15:10:13
修改2025-02-17 15:10:13
4300
举报
文章被收录于专栏:Windows技术交流Windows技术交流

背景:参考https://cloud.tencent.com/developer/article/2475831,对mbr转gpt,还要不丢数据,在操作之前先做快照,并记录机器和磁盘的对应关系,以及机器系统内部的disk instanceid、磁盘序号、盘符的对应关系。

一句话命令只能显示disk instanceid、磁盘序号,研究了下没有直接的命令可以一键三连输出disk instanceid、磁盘序号、盘符,只能用powershell代码段来搞,分享如下:

代码语言:txt
复制
# 获取所有磁盘驱动器的信息
$diskDrives = Get-WmiObject -Class Win32_DiskDrive

# 按DeviceID排序磁盘驱动器
$diskDrives = $diskDrives | Sort-Object { [int]($_.DeviceID -replace '^\\\\\.\\PHYSICALDRIVE', '') }

# 遍历所有磁盘驱动器
foreach ($diskDrive in $diskDrives) {
    # 获取DeviceID并切分
    $deviceID = $diskDrive.DeviceID
    $driveNumber = $deviceID -replace '^\\\\\.\\PHysICALDRIVE', ''
    $serialNumber = $diskDrive.SerialNumber

    Write-Output "Disk: $deviceID"
    Write-Output "Number: $driveNumber"
    Write-Output "Serial Number: $serialNumber"

    # 获取与磁盘$diskDrive关联的所有分区
    $partitions = $diskDrive.GetRelated('Win32_DiskPartition')

    # 遍历每个分区并获取关联的逻辑磁盘
    foreach ($partition in $partitions) {
        # 获取与分区关联的所有逻辑磁盘
        $logicalDisks = $partition.GetRelated('Win32_LogicalDisk')

        # 输出逻辑磁盘的盘符
        if ($logicalDisks) {
            $logicalDisks | Select-Object -ExpandProperty DeviceID
        }
    }
    Write-Output ""
}

效果如下

再深化下代码,把每个盘符的freesize、size显示一下

代码语言:txt
复制
# 获取所有磁盘驱动器的信息
$diskDrives = Get-WmiObject -Class Win32_DiskDrive

# 按DeviceID排序磁盘驱动器
$diskDrives = $diskDrives | Sort-Object { [int]($_.DeviceID -replace '^\\\\\.\\PHYSICALDRIVE', '') }

# 遍历所有磁盘驱动器
foreach ($diskDrive in $diskDrives) {
    # 获取DeviceID并切分
    $deviceID = $diskDrive.DeviceID
    $driveNumber = $deviceID -replace '^\\\\\.\\PHysICALDRIVE', ''
    $serialNumber = $diskDrive.SerialNumber

    Write-Output "Disk: $deviceID"
    Write-Output "Number: $driveNumber"
    Write-Output "Serial Number: $serialNumber"

    # 获取与磁盘$diskDrive关联的所有分区
    $partitions = $diskDrive.GetRelated('Win32_DiskPartition')

    # 遍历每个分区并获取关联的逻辑磁盘
    foreach ($partition in $partitions) {
        # 获取与分区关联的所有逻辑磁盘
        $logicalDisks = $partition.GetRelated('Win32_LogicalDisk')

        # 输出逻辑磁盘的盘符
        if ($logicalDisks) {
            $volumeIDs = $logicalDisks | Select-Object -ExpandProperty DeviceID
            foreach ($volumeID in $volumeIDs) {
                Get-Volume | Where-Object { $_.DriveType -eq "Fixed" -and $_.DriveLetter -match $volumeID.split(":")[0] } | Format-Table -AutoSize
            }
        }
    }
    Write-Output ""
}

代码语言:txt
复制
$driveInfo1 =Get-Volume | Where-Object { $_.DriveType -eq "Fixed" -and $_.DriveLetter -match "[A-Z]" } | Sort-Object DriveLetter
$driveInfo2 =Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Free -ge 0 }|ft -auto

$driveInfo1
$driveInfo2

只能显示disk instanceid、磁盘序号的一句话命令也分享如下:

代码语言:txt
复制
Get-Disk |ft SerialNumber,DiskNumber,Size,AllocatedSize,FriendlyName,IsBoot,IsOffline,IsReadOnly,Location,NumberOfPartitions -AutoSize
代码语言:txt
复制
Get-PhysicalDisk |ft SerialNumber,FriendlyName,PhysicalLocation,AllocatedSize,Size -AutoSize
代码语言:txt
复制
wmic diskdrive get caption,deviceid,serialnumber
wmic path win32_physicalmedia get SerialNumber,Tag

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档