if / elseif无法正常工作

时间:2016-01-13 16:42:36

标签: powershell if-statement

我有一个脚本可以检查顶级w3wp进程使用的内存量。然后,根据它使用的1 gig的接近程度,它会给出一条消息。

param($warn, $crit)
$LastExitCode = 3
$Output1 = ""
$output = ""
$myW3WP = Get-Process w3wp | Sort -Descending WS | select -first 1 |
          Measure-Object WS -Sum 
$myW3WP = ("{0:N2} " -f ($myW3WP.sum / 1mb))
$myW3WP.trim()
if ($myW3WP -gt $crit) {
    $LastExitCode = 2
    $output1 = "CRITICAL: Memory for W3WP has passed 1 gig $myW3WP"
    $output = $output1
} elseif ($myW3WP -gt $warn) {
    $LastExitCode = 1
    $output1 = "WARN: Memory for W3WP is getting close to 1 gig $myW3WP"
    $output = $output1
} else {
    $LastExitCode = 0
}

$output = $output1
Write-Host $output $LastExitCode "$myW3WP >= " $crit  ($myW3WP -gt $crit) "$myW3WP >= " $warn ($myW3WP -gt $warn)
$myW3WP = ""

$crit的值为1000,$warn的值为900。 (注意:Write-Host行与故障排除相似)

以下是我得到的输出:

  

关键:W3WP的内存已超过1 gig 161.03 2 161.03> = 1000 True 161.03> = 900 False

161.03是正在使用的RAM的内存。

为什么说161.03大于1000?

2 个答案:

答案 0 :(得分:2)

不要比较苹果和橘子!

如果要将其与其他数值进行比较,则需要一个数值

致电时:

$myW3WP = ("{0:N2} " -f ($myW3WP.sum / 1mb))
$myW3WP.trim()

您创建字符串

用以下代码替换这两行:

$myW3WP = $myW3WP.Sum / 1MB

它会起作用

答案 1 :(得分:1)

$myW3WP是一个字符串,而不是一个数字,因此您正在进行文本比较,而不是数字比较。这一行:

$myW3WP = ("{0:N2} " -f ($myW3WP.sum / 1mb))

是什么迫使变量成为字符串。只需将其保留为数字,不要担心小数位:

$myW3WP = $myW3WP.sum / 1mb