我有一个脚本可以检查顶级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?
答案 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