我试图定义一个外部脚本,它将在Windows上的NSClient ++ 0.4.1中采用可选参数。 遵循我定义的nsclient-full.ini
示例代码
mycheck=cmd /C echo C:\mydir\myscript.ps1 %ARGS% | powershell.exe -command -
它只是产生string%ARGS%
作为唯一的parameter passing给myscript.ps1 ,不pipe我在通过NRPE调用时指定的是什么(如果有的话,使用Nagios的check_nrpe
)。 然后我试图重写定义
mycheck=cmd /C echo C:\mydir\myscript.ps1 $ARG1$ $ARG2$ | powershell.exe -command -
( myscript.ps1将占用两个参数),这有一点帮助。 至less,如果提供了两个参数,我可以通过args[]
数组获取它们。 当调用less于两个参数时,麻烦就开始了 – 在这种情况下,string$ARG2
和$ARG1$
作为parameter passing。 在myscript.ps1的代码中处理这种情况,使整个参数处理例程最好是丑陋的。
有没有一个明智的方式来定义一个外部脚本的可选参数,如果没有指定参数,将不会传递NSClient的variables名称?
首先是%ARGS%tingy是一个包装器(这是别的东西),也许我应该重命名$ ARGS $使它不那么困惑?
反正0.4.2.61之前的NSClient ++不支持可变参数。 这是在0.4.2.61中添加的,但是按照这张票的要求。
从NSClient ++ 0.4.2.61开始,有两个新选项$ ARGS $和$ ARGS“$,后者将引用所有string。
nsclient.ini中的configuration:
[/settings/external scripts/scripts] x=scripts\\check_test.bat $ARGS$ y=scripts\\check_test.bat $ARGS"$
执行未加引号的版本:
x 1 "2 3" 4 5 D ext-script Command line: scripts\\check_test.bat 1 2 3 4 5 L client OK: Test arguments are: (1 2 3)
执行引用的版本:
y 1 "2 3" 4 5 D ext-script Command line: scripts\\check_test.bat "1" "2 3" "4" "5" L client OK: Test arguments are: ("1" "2 3" "4")