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")
Другие вопросы по тегам