我正在研究基于http://www.powershellneedfulthings.com/?p=36的电源shell脚本,以检查没有分配驱动器号的卷的磁盘空间。
该脚本运行良好,但我想过滤只显示可用磁盘空间少于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 :(得分:0)
我认为where子句变量$FreePerc
是个问题。 Arco有正确的想法。
$volumes | Select SystemName, Label, $TotalGB, $FreeGB, $FreePerc | Where-Object {$_.'Free(%)' -le 10} | Format-Table -AutoSize
我将该属性放在单引号中,因为我认为PowerShell会尝试评估(%)
。同样为了使Arco的解决方案有效,可能更容易调用Name
的{{1}}属性。这样你只需要更新一个位置
$FreePerc