我希望你能翻译以下数组(简化版):
$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".".
编辑2:
splatteredbits:
我正在使用你的代码,一切都运行良好,但是我无法通过这个比较:
$rowsGreaterThanThree.Count -eq $v.Count
$rowsGreaterThanThree的值为:
ProcessorTime
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
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"下方多出了一行空白(这里不可见)。$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"}