Восстановление емкости диска с помощью powershell
Я сделал этот код для подсчета емкости диска, но когда я запускаю его только с 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] в моем цикле for?
2 ответа
Я не могу ответить, почему ваш 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, так как вы не упомянули ОС и 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