Powershell 检查\u nrpe将返回代码1视为正常

Powershell 检查\u nrpe将返回代码1视为正常,powershell,return-value,nagios,exit-code,nrpe,Powershell,Return Value,Nagios,Exit Code,Nrpe,我有一个powershell脚本,我通过check\u nrpe调用它。当我做被动检查时,我看到退出代码/返回值为1,但它仍然被视为状态OK而不是CRITICAL 基本上,此脚本只检查目标文件夹..\bar是否为空。如果为空,则脚本返回“0”,从而在Nagios中触发OK状态。如果文件在等待25秒后仍不移动,则返回“1”,从而触发Nagios中的临界状态 我在文件夹中保留了一些文件,可以看到返回值为“1”。然而,nagios仍然将其视为状态OK 使用下面的命令进行被动检查 $ /usr/lib6

我有一个powershell脚本,我通过check\u nrpe调用它。当我做被动检查时,我看到退出代码/返回值为1,但它仍然被视为状态OK而不是CRITICAL

基本上,此脚本只检查目标文件夹..\bar是否为空。如果为空,则脚本返回“0”,从而在Nagios中触发OK状态。如果文件在等待25秒后仍不移动,则返回“1”,从而触发Nagios中的临界状态

我在文件夹中保留了一些文件,可以看到返回值为“1”。然而,nagios仍然将其视为状态OK

使用下面的命令进行被动检查

$ /usr/lib64/nagios/plugins/check_nrpe -H 10.XX.X.XXX -c check_kpis -t 30
出局

1
脚本如下

$path = "D:\foo\bar"
$flagged1 = "D:\temp\flag1.txt"
$flagged2 = "D:\temp\flag2.txt"

$contents = Get-ChildItem -Path $path -Force -Recurse
if ( $contents.count -gt 0 )
{
    $contents.Name | Out-File -FilePath $flagged1
    Start-Sleep -s 25
    $contents = Get-ChildItem -Path $path -Force -Recurse
    $contents.Name | Out-File -FilePath $flagged2
    if ( $contents.count -gt 0  )
    {
        $diff = Compare-Object -ReferenceObject $(Get-Content $flagged1) -DifferenceObject $(Get-Content $flagged2) -IncludeEqual 
        If ($diff.SideIndicator -eq "==")
        {
            return 1
            exit
        }
        else
        {
            return 0
            exit
        }
    }
    else
    {
        return 0
        exit
    }
}
else
{
    return 0
    exit
}

有人能指出这里有什么问题吗?

是退出代码决定了状态,您使用的是甚至不在函数中的返回。这样比较好

$path = "D:\foo\bar"
$flagged1 = "D:\temp\flag1.txt"
$flagged2 = "D:\temp\flag2.txt"

$contents = Get-ChildItem -Path $path -Force -Recurse
if ( $contents.count -gt 0 )
{
    $contents.Name | Out-File -FilePath $flagged1
    Start-Sleep -s 25
    $contents = Get-ChildItem -Path $path -Force -Recurse
    $contents.Name | Out-File -FilePath $flagged2
    if ( $contents.count -gt 0  )
    {
        $diff = Compare-Object -ReferenceObject $(Get-Content $flagged1) -DifferenceObject $(Get-Content $flagged2) -IncludeEqual 
        If ($diff.SideIndicator -eq "==")
        {
            echo 1
            exit 1
        }
        else
        {
            echo 0
            exit 0
        }
    }
    else
    {
        echo 0
        exit 0
    }
}
else
{
    echo 0
    exit 0
}