2014-10-07 123 views
0

我正在使用基於http://www.powershellneedfulthings.com/?p=36的Power Shell腳本來檢查沒有分配驅動器盤符的卷的磁盤空間。無驅動器盤符的驅動器的Powershell可用磁盤空間

該腳本工作得很好,但我想過濾只顯示有少於10%的可用磁盤空間的驅動器。我遇到了使用哈希表的where-object過濾器的麻煩。

# calculations for displaying disk size information 
$TotalGB = @{Name="Capacity(GB)";expression={[math]::round(($_.Capacity/ 1GB),2)}} 
$FreeGB = @{Name="FreeSpace(GB)";expression={[math]::round(($_.FreeSpace/1GB),2)}} 
$FreePerc = @{Name="Free(%)";expression={[math]::round(((($_.FreeSpace/1GB)/($_.Capacity/1073741824)) * 100),0)}} 

# array declarations 
$volumes = @() 

# import server names to check 
$servers = (Get-Content .\servers.txt) 

# check disk space for volumes without drive letter 
foreach ($server in $servers){ 
    $volumes += Get-WmiObject -computer $server win32_volume | Where-Object {$_.DriveLetter -eq $null -and $_.Label -ne "System Reserved"} 
} 
$volumes | Select SystemName, Label, $TotalGB, $FreeGB, $FreePerc | Format-Table -AutoSize 

我想的是:

Where-Object {$FreePerc -le 10} 

的電流輸出爲:

SystemName Label  Capacity(GB) FreeSpace(GB) Free(%) 
---------- -----  ------------ ------------- ---- 
SERVER01 X:\data\    9.97   0.89 9 
SERVER01 X:\log\    9.97   1.20 12 
SERVER01 X:\info\    9.97   3.49 35 

我想只顯示有不到10%的可用磁盤空間的卷。所以在這種情況下,只應顯示第一個條目。

謝謝!

+0

@ arco444感謝,但是這似乎並沒有產生任何影響或者 – powersheller 2014-10-07 12:38:37

+0

你有一些示例輸出,那麼,我們可以看到什麼,我們需要過濾?你也可以在'Format-table'之前加上'Where-Object {$ FreePerc -le 10}'正確 – Matt 2014-10-07 14:39:21

+0

@Matt我已經將輸出添加到上面的代碼中。當我在'Format-table'之前添加'Where-Object {$ FreePerc -le 10}'時,我會得到一個錯誤:'對運算符'-le'的錯誤參數:無法比較「System.Collections.Hashtable」 「10」。錯誤:「不能將類型」System.Int32「的」10「值轉換爲鍵入」System.Collections.Hashtable「。」。 – powersheller 2014-10-07 14:53:32

回答

0

我認爲where子句變量$FreePerc是問題所在。阿科有正確的想法。

$volumes | Select SystemName, Label, $TotalGB, $FreeGB, $FreePerc | Where-Object {$_.'Free(%)' -le 10} | Format-Table -AutoSize 

我把單引號的屬性,因爲我覺得PowerShell中會嘗試以其他方式評估(%)。爲了使Arco的解決方案能夠正常工作,撥打$FreePercName可能會更容易。這樣,你只需要更新一個位置

$volumes | Select SystemName, Label, $TotalGB, $FreeGB, $FreePerc | Where-Object {$_.($FreePerc.Name) -le 10} | Format-Table -AutoSize 
+0

非常感謝你馬特!你讓我今天很開心!這兩個選項都完美無缺:) – powersheller 2014-10-07 15:07:38