2016-01-13 47 views
0

我有一个脚本来检查顶部w3wp进程是使用多少内存。然后根据它使用的演出距离有多近,它会发出一条消息。如果/ ELSEIF不工作的权利

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演出161.03 2 161.03> = 1000 True 161.03> = 900 False

161.03是正在使用的RAM的大小。

为什么跟它161.03任何想法是大于1000?

+2

因为你从数值改变'$ myW3WP'值与'-f'运营商的字符串。现在,由于'$ myW3WP'是一个字符串,执行字符串比较和*字母*'161'大于'1000' –

回答

2

不要比较苹果和橘子!

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

创建字符串

,如果你想将其与其他数值

当你调用你需要的数值。

只有更换这两行:

​​

,它会工作

+0

完美....我有一种感觉,一个字符串渐渐在那里莫名其妙。我做了这种改变,删除了修剪线,现在我的输出如下所示:222.63671875> = 1000 False 222.63671875> = 900 False – johnfli

+0

很高兴帮助。 Btw'-gt'等价于'>' - 如果你想要一个'> ='比较你需要使用'-ge' –

1

$myW3WP是一个字符串,不是一个数字,所以你在做一个文本比较,而不是一个数字一个。该行:

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

是什么强制变量是一个字符串。只要把它作为一个数字,不要担心小数位:

$myW3WP = $myW3WP.sum/1mb 
+1

完美....我有一种感觉,一个字符串渐渐在那里莫名其妙。我这样做的改变,去掉了装饰线,而现在我的输出如下:222.63671875> = 1000假222.63671875> = 900假 – johnfli