使用Powershell检索磁盘容量

时间:2018-10-15 14:23:22

标签: powershell for-loop cmdlets

我编写了此代码来计算磁盘容量,但是当我仅在笔记本电脑中使用SSD来运行它时,我会得到0GB。当我插入USB /外部空间后,它会计算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]?

2 个答案:

答案 0 :(得分:2)

我无法回答为什么for循环在不观察环境的情况下失败的原因,但是几乎没有用例。您应该改为选择foreach循环:

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

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

答案 1 :(得分:0)

假设您没有提到Windows 10,因为Windows 10中的OS和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的环境中,它将返回:

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

仅返回SSD:

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

说明:Foreach已连接磁盘,存储名称,介质类型和容量(以变量表示)。 *将字节容量除以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

这将返回类似的内容:

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