【问题标题】:Powershell free disk space for drives without drive letter没有驱动器号的驱动器的 Powershell 可用磁盘空间
【发布时间】: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


【解决方案1】:

我认为 where 子句变量 $FreePerc 是问题所在。 Arco 的想法是对的。

$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2021-11-12
    相关资源
    最近更新 更多