如何检查阵列中的任何成员是否大于9000

时间:2016-09-12 15:15:13

标签: arrays powershell

如果整个数组的一个成员大于9000,我需要制作一个采取行动的脚本。

$all = 1,10,999,1990,2002,9101,5000,12,500
    foreach($cauta in $all){
        if($cauta -gt 7000){
            Send-MailMessage -To me@myemail.com -From alert@myemail.com -Subject "CRITICAL load" 
        }
        else{
            Send-MailMessage -To me@myemail.com -From alert@myemail.com -Subject "OK load" 
        }
}

问题是,通过这个foreach,它会不断向我发送电子邮件。 我需要收到一封“OK”或“CRITICAL”状态的电子邮件: 如果其中一个阵列成员大于9000 - >发送一封关键状态的电子邮件。 如果阵列的所有成员都低于9000 - >发送一封ok状态的电子邮件。

4 个答案:

答案 0 :(得分:5)

这似乎是Measure-Object的完美案例。使用-Maximum开关,我们可以返回最大的数组元素,因为它们是整数。

if(($all | Measure-Object -Maximum).Maximum -gt 7000){
    "critical"
} else {
    "ok"
}

没有意义循环检查所有元素。

另外,正如wOxxOm提醒我的那样,-gt作为数组运算符。你可以像这样使用它......

$all -gt 7000

它将返回所有大于7000的元素。如果没有匹配,则返回Null。如果您将该结果作为布尔值进行测试以获得相同的效果。

if($all -gt 7000){
    "critical"
} else {
    "ok"
}

请注意这种方法,就好像这个数组中有字符串一样,它也可以返回它们。使用Measure-Object将解释该问题并将整数字符串视为整数。仍然可以通过真正的字符串失败,让所有人都知道你的数据类型!

答案 1 :(得分:2)

你真的不需要循环。 Powershell的关系运算符用于数组。例如,您可以输入:

$all = 1,10,999,1990,2002,9101,5000,12,500 
if ($all -gt 9000) { echo "too big..." }

如果你这样做

$large = $all -ge 5000
if ($large) { echo "These are too big: $large" }

$ large将被赋予一个仅包含大于或等于5000的值的数组.Powershell将任何非空数组视为真实,使第一个示例工作...

答案 2 :(得分:1)

您可以执行类似

的操作
$all = 1, 10, 999, 1990, 2002, 9101, 5000, 12, 500
$subject = "OK load"
foreach ($cauta in $all)
{
    if ($cauta -gt 7000)
    {
        $subject = "CRITICAL load"
    }
}
Send-MailMessage -To me@myemail.com -From alert@myemail.com -Subject $subject

答案 3 :(得分:1)

我建议您使用Measure-Object,但如果您想使用代码处理它,请将其更改为以下内容:

$greater = $false
$all = 1,10,999,1990,2002,9101,5000,12,500
foreach($cauta in $all){
    if($cauta -gt 7000){
        $greater = $true
        break 
    }
}
if ($greater -eq $true){
Send-MailMessage -To me@myemail.com -From alert@myemail.com -Subject "CRITICAL load" 
}
else{
Send-MailMessage -To me@myemail.com -From alert@myemail.com -Subject "OK load"
}