我正在尝试定义一个外部脚本,该脚本将在 Windows 上的 NSClient++ 0.4.1 中接受可选参数。按照nsclient-full.ini
我定义的示例代码
mycheck=cmd /C echo C:\mydir\myscript.ps1 %ARGS% | powershell.exe -command -
它只返回%ARGS%
作为唯一参数传递给我的脚本.ps1,无论我在 NRPE 调用中指定了什么(check_nrpe
如果有必要,可以使用 Nagios)。然后我尝试将定义重写为
mycheck=cmd /C echo C:\mydir\myscript.ps1 $ARG1$ $ARG2$ | powershell.exe -command -
(我的脚本.ps1最多需要两个参数),这确实有点帮助。至少,如果提供了两个参数,我可以通过数组获取它们args[]
。当调用的参数少于两个时,麻烦就开始了——在这种情况下,文字字符串$ARG2
和$ARG1$
作为参数传递。在代码中处理这种情况我的脚本.ps1使得整个论证处理过程变得非常丑陋。
有没有一种理智的方式来定义选修的如果没有指定参数,则不会传递 NSClient 的变量名的外部脚本的参数?
答案1
首先,%ARGS% tingy 是一个包装器(这是别的东西),也许我应该重命名 $ARGS$ 以使其不那么令人困惑?
无论如何,NSClient++ 在 0.4.2.61 之前不支持变量参数。不过,根据此票中的请求,此功能已在 0.4.2.61 中添加。
从 NSClient++ 0.4.2.61 开始有两个新选项 $ARGS$ 和 $ARGS"$,后者将引用所有字符串。
nsclient.ini中的配置:
[/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")