我有这个数组(简化):

$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:

泼溅:

我正在使用您的代码,一切正常,但是我无法通过此比较:
$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”下还有一个空白行(此处不可见)。在$ rowsGreaterThanThree.Count中,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"}

最佳答案

简单:)

PS> $v -gt 3
5
6
8
5
7

要么
$v | Where-Object { $_ -gt 3 }

关于powershell - Powershell Foreach对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12370598/

10-08 22:36