Назад | Перейти на главную страницу

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, если параметр не был указан?

Во-первых,% 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")