使用 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
我编写此代码是为了计算磁盘容量,但是当我 运行 它只使用笔记本电脑中的 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