0

下面是检查磁盘空间的代码:

$disks = Get-WmiObject -ComputerName WDSMS01 -Namespace root\cimv2 -Query "Select * from Win32_LogicalDisk where DriveType=3"

$disks.DeviceID
$dsql01 = @()

foreach($db in $disks)
{
    $dsql = New-Object PSObject
    $dsql | Add-Member -MemberType NoteProperty -Name "Drive Name" -value $db.DeviceID
    $dsql | Add-Member -MemberType NoteProperty -Name "Total Space(GB)" -value ($db.Size/1GB)
    $dsql | Add-Member -MemberType NoteProperty -Name "Free Space(GB)" -value ($db.FreeSpace/1GB)
    $dsql01 += $dsql
}

$dsql01

是否可以将小数限制为 2 位?此外,添加另一个以 % 格式计算可用空间的列。

谢谢。

4

3 回答 3

6

这在一定程度上取决于您到底需要什么。您可以使用[Math]::Round在两位数后四舍五入:

[Math]::Round($db.Size/1GB, 2)

但是如果数字后面跟着零,那可能会给您留下少于两位数的数字,例如14.6在表格中看起来不太好。

另一种选择是格式化数字:

($db.Size/1GB).ToString('0.00')

这将始终使用相同数量的十进制数字,会产生一个字符串,因此执行进一步的计算可能会受到阻碍。

至于你的第二个问题,这实际上是微不足道的,只需添加另一个Add-Member调用:

$dsql | Add-Member NoteProperty 'Free Space (%)' (100*$db.FreeSpace/$db.Size)

您也可以(在 PowerShell v2 中)将所有这些放在一个New-Object调用中:

$dsql = New-Object PSObject -Property @{
    'Drive Name' = $db.DeviceID
    'Total Space (GB)' = $db.Size / 1GB
    'Free Space (GB)' = $db.FreeSpace / 1GB
    'Free Space (%)' = 100 * $db.FreeSpace / $db.Size
}

当我们这样做时,foreach循环不是 PowerShell-y。让我们用管道重写它:

$disks = Get-WmiObject -ComputerName WDSMS01 -Namespace root\cimv2 -Query "Select * from Win32_LogicalDisk where DriveType=3"
$disks.DeviceID
$dsql01 = $disks | ForEach-Object {
    New-Object PSObject -Property @{
        'Drive Name' = $_.DeviceID
        'Total Space (GB)' = $_.Size / 1GB
        'Free Space (GB)' = $_.FreeSpace / 1GB
        'Free Space (%)' = 100 * $_.FreeSpace / $_.Size
    }
}
于 2013-01-23T13:57:39.517 回答
1

使用格式化程序示例:

PS>"{0:N2}" -f (11531055554 /1GB)
10,74

获得百分比:

 $pfree=$dsql.free *100 /$dsql.total
 $dsql| Add-Member -MemberType NoteProperty -Name "pFree" -value $pfree
于 2013-01-23T13:54:14.223 回答
0

试试这个:

-value ("{0:0.00}" -f ($db.Size/1GB))

-value ("{0:0.00}" -f ($db.FreeSpace/1GB))

于 2013-01-23T14:04:55.537 回答