2014-10-07 138 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