【发布时间】:2012-09-11 13:15:56
【问题描述】:
我有这个数组(简化):
$v = 3,5,3,6,8,3,5,7
我需要检查所有值是否都高于 3。我认为 Foreach 或 Foreach-Object 将适合此任务,但我无法弄清楚它的工作方式。
我尝试过类似的方法,但它不起作用。
$v | Foreach-Object (if($_ -lt 10){Write-Host "$_ lt 10"})
编辑:
谢谢你们! 我将语句更改为:
$v | Foreach-Object {if($_ -lt 10){$check_value = "True"}}
它现在可以工作了,但我刚刚意识到,简单化的数组不是一个好主意。我正在使用的数组中的数据是从 MS SQL 数据库中获取的。如果我在屏幕上显示数组,我会得到数字,但数据类型是 System.Data.DataRow,我无法与数字进行比较。我收到错误消息:
Bad argument to operator '-lt': Could not compare "System.Data.DataRow" to "95". Error: "Cannot convert the "95" value of type "System.Int32" to type "System.Data.DataRow".".
EDIT2:
飞溅的比特:
我正在使用你的代码,一切正常,但我无法通过这个比较:
$rowsGreaterThanThree.Count -eq $v.Count
$rowsGreaterThanThree 的值是:
处理器时间
0.00127998361620918
1.53972183002211
0.00127998361620918
0.00127998361620918
0.00127998361620918
1.53972183002211
0.00127998361620918
0.00127998361620918
0.00127998361620918
3.1262399841282
0
0
0
0
0
并且 $v 包含:
处理器时间
0.00127998361620918
1.53972183002211
0.00127998361620918
0.00127998361620918
0.00127998361620918
1.53972183002211
0.00127998361620918
0.00127998361620918
0.00127998361620918
3.1262399841282
0
0
0
0
0
值相同,但 $v 中的“ProcessorTime”下方还有一个空白行(此处不可见)。 Count 在 $rowsGreaterThanThree.Count 中给出 16 而不是 15。
我的代码:(我将 -gt 修改为 -ge,因为有零。在工作版本中,我想检查处理器是否在一段时间内加载到 95% 以上。)
$warning_values = @( $check | Where-Object { $_.ProcessorTime -ge 0 } )
if($warning_values.Count -eq $check.Count )
{
Write-Host -ForegroundColor "Warning!"
}
else { Write-Host "nothing"}
【问题讨论】:
-
这不起作用的原因是您需要将 foreach 语句包装在方括号 {} 而不是括号中。
-
哈哈,有人到那里是因为截至 2020 年 1 月 23 日的误导性博客,例如 this one?
标签: powershell powershell-2.0 powershell-remoting