Powershell -lt和-gt给出与预期相反的结果

时间:2019-03-25 17:37:17

标签: powershell get-wmiobject

在下面的代码中,如果我添加一个where对象,则-lt&->给出相反的预期结果。

我确定原因是我很愚蠢,但是我以什么特定方式搞砸了?

这部分给出了预期的结果,在我的情况下,单个驱动器的%Free为39.8

Get-WmiObject -Namespace root\cimv2 -Class win32_logicaldisk | where-object -Property drivetype -eq 3 | 
format-table deviceid,
@{n='GB Capacity';e={$_.size/1gb}},
@{n='GB Free';e={$_.freespace/1gb}},
@{n='%Free';e={($_.freespace/$_.size)*100}}

但是添加这个

| where {$_.'%Free' -gt 10}

导致无输出。实际上

| where {$_.'%Free' -gt 0}

无结果。相反,我必须使用

| where {$_.'%Free' -lt 0}

Powershell认为%Free是一个负数,我猜呢?

1 个答案:

答案 0 :(得分:4)

问题是您正在将Format-Table用管道输送到任何东西。除了输出到屏幕外,永远不要使用它。使用Format-Table会将所有内容输出为格式对象,而不输出任何通过管道传递到其中的内容。而是使用Select-Object来获得所需的东西。

Get-WmiObject -Namespace root\cimv2 -Class win32_logicaldisk | where-object -Property drivetype -eq 3 | 
Select-Object deviceid,
@{n='GB Capacity';e={$_.size/1gb}},
@{n='GB Free';e={$_.freespace/1gb}},
@{n='%Free';e={($_.freespace/$_.size)*100}}