PowerShell 2.0磁盘空间检查

时间:2013-01-23 13:48:28

标签: powershell

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

$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位?另外,添加另一个以%格式计算可用空间的列。

感谢。

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:1)

使用格式化程序示例:

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

获得百分比:

 $pfree=$dsql.free *100 /$dsql.total
 $dsql| Add-Member -MemberType NoteProperty -Name "pFree" -value $pfree

答案 2 :(得分:0)

试试这个:

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

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