使用 powershell 检索磁盘容量

Retrieving disk capacity with powershell

我编写此代码是为了计算磁盘容量,但是当我 运行 它只使用笔记本电脑中的 SSD 时,我得到 0GB。在我插入 USB/external space 之后,它计算了 ssd + USB。

$disk = Get-WmiObject Win32_DiskDrive

$capacity = 0;

for($i = 0;$i -lt $disk.Count; $i++){
    $capacity = $capacity + [math]::round(($disk[$i].Size/1GB),2)
}


Write-Host $capacity "GB"

这很好用 -> $disk.Size

为什么我的 for 循环中不取第一个 [0]?

如果不观察您的环境,我无法回答为什么您的 for 循环失败,但几乎没有用例。您应该改为选择 foreach 循环:

$capacity = foreach ($disk in Get-WmiObject -Class Win32_DiskDrive)
{
    [Math]::Round(($disk.Size / 1GB), 2)
}

"$(($capacity | Measure-Object -Sum).Sum)GB"

假设 Windows 10 因为你没有提到 OS 而 Windows 10 中的 CMDLETS 好多了。 *请参阅底部的 Windows 7 版本。

对于磁盘信息,我更喜欢使用 Get-PhysicalDisk,例如:

$DiskInfo = foreach ($disk in Get-PhysicalDisk) {

[string]$name = $disk.FriendlyName
[string]$type = $disk.MediaType
[int]$capacity = $disk.size / 1GB

    [pscustomobject]@{
    "Type"=$type;
    "Name"=$name;
    "Capacity (GB)"=$capacity;
    }

}


$DiskInfo

在我有一个 SSD 和一个机械 HDD 的环境中,它将 return:

Name                       Type Capacity (GB)
----                       ---- -------------
SAMSUNG MZ7TY256HDHP-000L7 SSD            238
ST500LX025-1U717D          HDD            466

例如,如果您只需要 SSD 的信息,您可以这样做:

$DiskInfo = foreach ($disk in Get-PhysicalDisk | Where-Object {$_.MediaType -eq "SSD"} ) {

[string]$name = $disk.FriendlyName
[string]$type = $disk.MediaType
[int]$capacity = $disk.size / 1GB

    [pscustomobject]@{
    "Type"=$type;
    "Name"=$name;
    "Capacity (GB)"=$capacity;
    }

}


$DiskInfo

其中 return 只有 SSD:

Type Name                       Capacity (GB)
---- ----                       -------------
SSD  SAMSUNG MZ7TY256HDHP-000L7           238

解释:对于每个连接的磁盘,存储名称、媒体类型和容量在变量中。 *将字节容量除以 1GB 以获得更好的数字。 仍然在 Foreach 中,在每次迭代时创建一个包含 3 个变量的自定义对象。

全部放在一起,然后您可以输出包含所有对象的变量 DiskInfo。

如果在 Windows 7 上,媒体类型不可用,因此您无法使用它。相反,您可以这样做:

$DiskInfo = foreach ($disk in Get-WmiObject -Class Win32_DiskDrive) {

[string]$name = $disk.model
[int]$capacity = $disk.size / 1GB

    [pscustomobject]@{
    "Name"=$name;
    "Capacity (GB)"=$capacity;
    }

}


$DiskInfo

这将 return 类似于:

Name                       Capacity (GB)
----                       -------------
SAMSUNG MZ7TY256HDHP-000L7           238
ST500LX025-1U717D                    466