Board logo

标题: [原创代码] PowerShell脚本get- 得到磁盘和分区信息 [打印本页]

作者: newswan    时间: 2021-7-8 19:33     标题: PowerShell脚本get- 得到磁盘和分区信息

用powershell 得到磁盘和分区信息,请看看,有什么改进么
  1. Function Format-FileSize() {
  2.     Param ( [Double]$size )
  3.     [string[]] $a = "B","K","M","G","T"
  4.     for ($i = $a.GetlowerBound(0) ; $i -le $a.GetUpperBound(0) -and $size -ge 1024 ; $i++) {
  5.         $size = $size / 1024
  6.     }
  7.     return ( [string]::Format("{0:0.0}", $size) + " " + $a[$i])
  8. }
  9. function get-DiskPart() {
  10.     [Object[]] $diskPhy = Get-PhysicalDisk
  11.     [Object[]] $disk = get-disk
  12.     $disk | add-member -NotePropertyName "MediaType" -NotePropertyValue ""
  13.     for ($i = 0 ; $i -le $disk.GetUpperBound(0) ; $i++){
  14.         $disk[$i].mediatype = ($diskPhy | Where-Object {$_.deviceid -eq $i} ).mediatype
  15.     }
  16.     [Object[]] $vol = Get-Volume
  17.     [Object[]] $part = Get-Partition
  18.     $part | add-member -NotePropertyName "FS" -NotePropertyValue ""
  19.     for ($i = 0 ; $i -le $part.GetUpperBound(0) ; $i++) {
  20.         $part[$i].FS = ( Get-Volume -Partition $part[$i] ).FileSystemType
  21.     }
  22.     return $disk,$part
  23. }
  24. function list-diskpart() {
  25.     $ftsize = @{label="Size" ; expression={(format-filesize($_.Size))} ; alignment ="right" ; width = 30 }
  26.     $ftOffset = @{label="Offset" ; expression={(format-filesize($_.Offset))} ; alignment ="right" ; width = 30 }
  27.     $ftdDisk = @{label="Disk" ; expression={$_.Number}}
  28.     $ftdName = @{label="Name" ; expression={$_.FriendlyName}}
  29.     $ftdBus = @{label="Bus" ; expression={$_.BusType}}
  30.     $ftdMedia = @{label="Media" ; expression={$_.MediaType}}
  31.     $ftdStyle = @{label="Style" ; expression={$_.PartitionStyle}}
  32.     $ftpDisk = @{label="Disk" ; expression={$_.DiskNumber}}
  33.     $ftpPart = @{label="Part" ; expression={$_.PartitionNumber}}
  34.     $ftpLetter = @{label="Ltr" ; expression={$_.DriveLetter}}
  35.     $ftpIsActive = @{label="Active" ; expression={ switch ($_.IsActive) { True {"A"} } } ; alignment ="center"}
  36.     $ftpIsBoot = @{label="Boot" ; expression={ switch ($_.IsBoot) { True {"B"} } }}
  37.     $ftpAB = @{label="A-B" ; expression={ switch ($_.IsActive) { True {"Active"} } ; switch ($_.IsBoot) { True {"Boot"} } }}
  38.     $disk | Format-Table $ftdDisk,$ftdName,$ftdBus,$ftdMedia,$ftsize,$ftdStyle
  39.     $part | Format-Table $ftpDisk,$ftpPart,$ftpLetter,$ftpIsActive,$ftsize,FS
  40. }
  41. $disk,$part = get-DiskPart
  42. list-diskpart
复制代码

作者: newswan    时间: 2021-7-8 19:35

本帖最后由 newswan 于 2021-7-8 19:45 编辑

输出内容为
  1. Disk Name                 Bus  Media    Size Style
  2. ---- ----                 ---  -----    ---- -----
  3.    0 Pioneer APS-SE20-256 NVMe SSD   238.5 G GPT
  4. Disk Part Ltr Active    Size FS
  5. ---- ---- --- ------    ---- --
  6.    0    1            260.0 M
  7.    0    2             16.0 M
  8.    0    3   C        100.0 G NTFS
  9.    0    4   D        138.2 G NTFS
复制代码
运行时间2秒
作者: newswan    时间: 2021-7-12 22:19

function init()
{
    $script:ftsize = @{label="Size" ; expression={(format-filesize($_.Size))} ; alignment ="right" ; width = 30 }
    $script:ftOffset = @{label="Offset" ; expression={(format-filesize($_.Offset))} ; alignment ="right" ; width = 30 }
    $script:ftdDisk = @{label="Disk" ; expression={$_.Number}}
    $script:ftdName = @{label="Name" ; expression={$_.FriendlyName}}
    $script:ftdBus = @{label="Bus" ; expression={$_.BusType}}
    $script:ftdMedia = @{label="Media" ; expression={$_.MediaType}}
    $script:ftdStyle = @{label="Style" ; expression={$_.PartitionStyle}}
    $script:ftpDisk = @{label="Disk" ; expression={$_.DiskNumber}}
    $script:ftpPart = @{label="Part" ; expression={$_.PartitionNumber}}
    $script:ftpLetter = @{label="Ltr" ; expression={$_.DriveLetter}}
    $script:ftpIsActive = @{label="Active" ; expression={ switch ($_.IsActive) { True {"A"} } } ; alignment ="center"}
    $script:ftpIsBoot = @{label="Boot" ; expression={ switch ($_.IsBoot) { True {"B"} } }}
    $script:ftpAB = @{label="A-B" ; expression={ switch ($_.IsActive) { True {"Active"} } ; switch ($_.IsBoot) { True {"Boot"} } }}
}

Function Format-FileSize() {
    Param ( [Double]$size )
    [string[]] $a = "B","K","M","G","T"
    for ($i = $a.GetlowerBound(0) ; $i -le $a.GetUpperBound(0) -and $size -ge 1024 ; $i++) {
        $size = $size / 1024
    }
    return ( [string]::Format("{0:0.0}", $size) + " " + $a[$i])
}

function get-DiskPart() {
    [Object[]] $diskPhy = Get-PhysicalDisk
    [Object[]] $disk = get-disk
    $disk | add-member -NotePropertyName "MediaType" -NotePropertyValue ""
    for ($i = 0 ; $i -le $disk.GetUpperBound(0) ; $i++){
        $disk[$i].mediatype = ($diskPhy | Where-Object {$_.deviceid -eq $i} ).mediatype
    }
    [Object[]] $vol = Get-Volume
    [Object[]] $part = Get-Partition
    $part | add-member -NotePropertyName "FS" -NotePropertyValue ""
    for ($i = 0 ; $i -le $part.GetUpperBound(0) ; $i++) {
        $part[$i].FS = ( Get-Volume -Partition $part[$i] ).FileSystemType
    }
    return $disk,$part
}

function list-diskpart() {
    $disk | Format-Table $ftdDisk,$ftdName,$ftdBus,$ftdMedia,$ftsize,$ftdStyle
    $part | Format-Table $ftpDisk,$ftpPart,$ftpLetter,$ftpIsActive,$ftsize,FS
}

init
$disk,$part = get-DiskPart
list-diskpart

$dpv = read-host "select disk,part or vol"
$dpv = $dpv.trim()
switch -Regex ($dpv)
{
    '^([c-z])$' { $selvol = $matches[1] ; break }
    '(\d+)\D+(\d+)' { $seldisk = $matches[1] ; $selpart = $matches[2] ; break }
}

$part | where-object { ($_.DiskNumber -eq $seldisk -and $_.PartitionNumber -eq $selpart) -or $_.DriveLetter -eq $selvol } |
    Format-Table $ftpDisk,$ftpPart,$ftpLetter,$ftpIsActive,$ftsize,FS
作者: newswan    时间: 2021-8-7 20:20

  1. function init()
  2. {
  3.     $script:ftToTalSize = @{label="ToTalSize" ; expression={(zFormat-HrSize($_.Size))} ; alignment = "right" }
  4.     $script:ftAllocatedSize = @{label="Allocated" ; expression={(zFormat-HrSize($_.AllocatedSize))} ; alignment = "right" }
  5.     $script:ftOffset = @{label="Offset" ; expression={ [string]::format("{0:N0}",$_.Offset) } ; alignment = "right" ; Width = 20 }
  6.     $script:ftdDisk = @{label="Disk" ; expression={$_.Number}}
  7.     $script:ftdName = @{label="Name" ; expression={$_.FriendlyName}}
  8.     $script:ftdBus = @{label="Bus" ; expression={$_.BusType}}
  9.     $script:ftdMedia = @{label="Media" ; expression={$_.MediaType}}
  10.     $script:ftdStyle = @{label="Style" ; expression={$_.PartitionStyle}}
  11.     $script:ftpDisk = @{label="Disk" ; expression={$_.DiskNumber}}
  12.     $script:ftpPart = @{label="Part" ; expression={$_.PartitionNumber}}
  13.     $script:ftpPartType = @{label="PartType" ; expression={$_.Type}}
  14.     $script:ftpLetter = @{label="Ltr" ; expression={$_.DriveLetter}}
  15.     $script:ftpIsActive = @{label="Active" ; expression={ switch ($_.IsActive) { True {"A"} } } ; alignment ="center"}
  16.     $script:ftpIsBoot = @{label="Boot" ; expression={ switch ($_.IsBoot) { True {"B"} } }}
  17.     $script:ftpAB = @{label="A-B" ; expression={ switch ($_.IsActive) { True {"Active"} } ; switch ($_.IsBoot) { True {"Boot"} } }}
  18. }
  19. Function zFormat-HrSize() {
  20.     Param ( [Double]$size )
  21.     $a = "BKMGT"
  22.     for ($i = 0 ; $i -lt $a.length -and $size -ge 1024 ; $i++) {
  23.         $size = $size / 1024
  24.     }
  25.     return ( [string]::Format("{0:0.0}", $size) + " " + $a.Substring($i,1) )
  26. }
  27. function get-DiskPart() {
  28.     [Object[]] $diskPhy = Get-PhysicalDisk
  29.     [Object[]] $disk = get-disk | sort-object { $_.DiskNumber }
  30.     $disk | add-member -NotePropertyName "MediaType" -NotePropertyValue ""
  31.     for ($i = 0 ; $i -le $disk.GetUpperBound(0) ; $i++){
  32.         $disk[$i].mediatype = ($diskPhy | Where-Object {$_.deviceid -eq $i} ).mediatype
  33.     }
  34.     [Object[]] $vol = Get-Volume
  35.     [Object[]] $part = Get-Partition | sort-object { $_.DiskNumber , $_.PartitionNumber }
  36.     $part | add-member -NotePropertyName "FSType" -NotePropertyValue ""
  37.     $part | add-member -NotePropertyName "FSLabel" -NotePropertyValue ""
  38.     for ($i = 0 ; $i -le $part.GetUpperBound(0) ; $i++) {
  39.         $part[$i].FSType = ( Get-Volume -Partition $part[$i] ).FileSystemType
  40.         $part[$i].FSLabel = ( Get-Volume -Partition $part[$i] ).FileSystemLabel
  41.     }
  42.     return $disk,$part
  43. }
  44. function list-diskpart() {
  45.     $disk | Format-Table $ftdDisk,$ftdName,$ftdBus,$ftdMedia,$ftdStyle,$ftToTalSize,$ftAllocatedSize
  46.     $partStr = $part | Format-Table $ftpDisk,$ftpPart,$ftpLetter,$ftpIsActive,FSType,FSLabel,$ftToTalSize,$ftOffset,$ftpPartType | out-string
  47.     $partStr = $partStr -replace "`r","" -replace "`n+$","`n" -split "`n"
  48.     for ( $i = 0 ; $i -le $partstr.GetUpperBound(0) ; $i++)
  49.     {
  50.         if ( $partstr[$i-1] -match "^\s+(\d+)" ) { $n1 = $matches[1] }
  51.         if ( $partstr[$i] -match "^\s+(\d+)" ) { $n2 = $matches[1] }
  52.         if ( [int]$n1 + 1 -eq [int]$n2 )
  53.         {
  54.                 $partstr[2]
  55.         }
  56.         $partstr[$i]
  57.     }
  58. }
  59. init
  60. $disk,$part = get-DiskPart
  61. list-diskpart
  62. $dpv = read-host "select disk,part or vol"
  63. $dpv = $dpv.trim()
  64. switch -Regex ($dpv)
  65. {
  66.     '^([c-z])$' { $selvol = $matches[1] ; break }
  67.     '(\d+)\D+(\d+)' { $seldisk = $matches[1] ; $selpart = $matches[2] ; break }
  68. }
  69. $part | where-object { ($_.DiskNumber -eq $seldisk -and $_.PartitionNumber -eq $selpart) -or ($_.DriveLetter -eq $selvol) } |
  70.     Format-Table $ftpDisk,$ftpPart,$ftpLetter,$ftpIsActive,$ftToTalSize,FSType,FSLabel
复制代码

作者: newswan    时间: 2021-8-7 21:03

本帖最后由 newswan 于 2021-8-7 21:11 编辑

输出样式
  1. Disk Name                 Bus                 Media Style ToTalSize Allocated
  2. ---- ----                 ---                 ----- ----- --------- ---------
  3.    0 Pioneer APS-SE20-256 NVMe                SSD   GPT     238.5 G   238.5 G
  4.    1 Msft Virtual Disk    File Backed Virtual SSD   MBR      10.0 G     5.0 G
  5.    2 Msft Virtual Disk    File Backed Virtual SSD   GPT      10.0 G    10.0 G
  6.    3 ST500DM002-1ER14C    SATA                HDD   MBR     465.8 G   465.8 G
  7. Disk Part Ltr Active FSType  FSLabel    ToTalSize          Offset PartType
  8. ---- ---- --- ------ ------  -------    ---------          ------ --------
  9.    0    1                                 260.0 M       1,048,576 System
  10.    0    2                                  16.0 M     273,678,336 Reserved
  11.    0    3   C        NTFS                 100.0 G     290,455,552 Basic
  12.    0    4   D        NTFS                 138.2 G 107,664,637,952 Basic
  13. ---- ---- --- ------ ------  -------    ---------          ------ --------
  14.    1    0                                   9.0 G   1,074,790,400 XINT13 Extended
  15.    1    1            Unknown             1023.0 M       1,048,576 Logical
  16.    1    2            Unknown                4.0 G   1,075,838,976 Logical
  17. ---- ---- --- ------ ------  -------    ---------          ------ --------
  18.    2    1                                  16.0 M          17,408 Reserved
  19.    2    2   W        NTFS    New Volume    10.0 G      16,777,216 Basic
  20. ---- ---- --- ------ ------  -------    ---------          ------ --------
  21.    3    1   F   A    NTFS                  60.0 G       1,048,576 IFS
  22.    3    2   G        NTFS                 100.0 G  64,425,558,016 IFS
  23.    3    3   H        NTFS                 305.8 G 171,799,740,416 IFS
复制代码

作者: newswan    时间: 2021-8-7 21:10

mbr 分区情况下,分区类型检测有问题
未格式化, primary 显示成 Logical
格式化,都显示成IFS




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2