2013-01-23 139 views
0

下面是檢查磁盤空間代碼:的PowerShell 2.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位數字,以限制小數?另外,添加另一個以%格式計算可用空間的列。

謝謝。

回答

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

使用格式化例如:

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

獲得百分比:

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

試試這個:

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

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