NSClient++: внешний скрипт с необязательными аргументами
Я пытаюсь определить внешний скрипт, который будет принимать необязательные аргументы в NSClient++ 0.4.1 на Windows. После nsclient-full.ini
пример кода, который я определил
mycheck=cmd /C echo C:\mydir\myscript.ps1 %ARGS% | powershell.exe -command -
который просто дает строку %ARGS%
передается в качестве единственного аргумента в myscript.ps1, независимо от того, что я указываю в своем вызове через NRPE (используя Nagios' check_nrpe
если это имеет значение). Затем я попытался переписать определение
mycheck=cmd /C echo C:\mydir\myscript.ps1 $ARG1$ $ARG2$ | powershell.exe -command -
(myscript.ps1 будет принимать до двух аргументов), что немного помогает. По крайней мере, если указаны два аргумента, я могу получить их через args[]
массив. Проблема начинается, когда вызов имеет менее двух аргументов - в этом случае буквенные строки $ARG2
а также $ARG1$
передаются в качестве аргументов. Обработка этого случая в коде myscript.ps1 делает всю процедуру обработки аргументов в лучшем случае уродливой.
Есть ли вменяемый способ определения необязательных параметров для внешнего скрипта, который бы не передавал имена переменных NSClient, если не был указан параметр?
1 ответ
Прежде всего, оттенок%ARGS% предназначен для оберток (что-то еще), возможно, мне следует переименовать этот $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")