Получение емкости диска с PowerShell - PullRequest
0 голосов
/ 15 октября 2018

Я сделал этот код для подсчета емкости диска, но когда я запускаю его только с SSD на моем ноутбуке, я получаю 0 ГБ.после того, как я вставляю 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

Почему это не занимает первое [0] в моемдля цикла?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Предполагается, что Windows 10, так как вы не упомянули ОС и CMDLETS в Windows 10, намного лучше.* См. Внизу версию для 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и один механический жесткий диск вернет:

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, имя хранилища, тип носителя и емкость в переменных.* Разделите емкость байта на 1 ГБ, чтобы получить лучшее число для просмотра.По-прежнему в 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
0 голосов
/ 15 октября 2018

Я не могу ответить, почему ваша петля for не работает, не наблюдая за вашей средой, но у нее почти никогда не бывает сценария использования.Вместо этого вы должны выбрать цикл foreach:

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

"$(($capacity | Measure-Object -Sum).Sum)GB"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...