如果整个数组的一个成员大于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状态的电子邮件。
答案 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"
}