以下是检查磁盘空间的代码:
$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位?另外,添加另一个以%格式计算可用空间的列。
感谢。
答案 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))