【发布时间】:2014-12-01 15:32:30
【问题描述】:
我正在编写基于http://www.powershellneedfulthings.com/?p=36 的power 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% 的卷。所以在这种情况下,应该只显示第一个条目。
谢谢!
【问题讨论】:
-
@arco444 谢谢,但这似乎也没有任何效果
-
您是否有一些示例输出,以便我们查看需要过滤的内容?你也把
Where-Object {$FreePerc -le 10}放在Format-table之前正确 -
@Matt 我已将输出添加到上面的代码中。当我在
Format-table之前添加Where-Object {$FreePerc -le 10}时,我会收到一个错误:Bad argument to operator '-le': Could not compare "System.Collections.Hashtable" to "10". Error: "Cannot convert the "10" value of type "System.Int32" to type "System.Collections.Hashtable".". -
我认为它不像带有 HashTable 属性
$FreePerc的 where 子句。 “免费(%)”可以工作
标签: powershell diskspace