Я пытаюсь определить внешний скрипт, который будет принимать необязательные аргументы в 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")