NSClient ++: script externo com argumentos opcionais

2

Estou tentando definir um script externo que aceita argumentos opcionais no NSClient ++ 0.4.1 no Windows. Seguindo o código de exemplo nsclient-full.ini que defini

mycheck=cmd /C echo C:\mydir\myscript.ps1 %ARGS% | powershell.exe -command -

que simplesmente gera a string %ARGS% passada como o único argumento para myscript.ps1 , não importa o que eu especifique em minha chamada através de NRPE (usando o check_nrpe do Nagios, se isso for importante). Eu então tentei reescrever a definição para

mycheck=cmd /C echo C:\mydir\myscript.ps1 $ARG1$ $ARG2$ | powershell.exe -command -

( myscript.ps1 levaria até dois argumentos), o que ajuda um pouco. Pelo menos, se dois argumentos forem fornecidos, posso buscá-los por meio do array args[] . O problema começa quando a chamada tem menos de dois argumentos - nesse caso, as sequências literais $ARG2 e $ARG1$ são passadas como argumentos. O manuseio deste caso no código de myscript.ps1 torna toda a rotina de processamento de argumentos feia na melhor das hipóteses.

Existe uma maneira sã de definir os parâmetros opcionais para um script externo que não passaria os nomes das variáveis do NSClient se nenhum parâmetro fosse especificado?

    
por the-wabbit 11.11.2013 / 22:05

1 resposta

3

Primeiro, o% ARGS% tingy é para um wrapper (que é outra coisa), talvez eu deva renomear $ ARGS $ para torná-lo menos confuso?

De qualquer forma o NSClient ++ a partir de antes de 0.4.2.61 não suporta argumentos variáveis. Isso foi adicionado em 0.4.2.61, mas conforme solicitação neste ticket.

A partir do NSClient ++ 0.4.2.61, há duas novas opções $ ARGS $ e $ ARGS "$ o último irá citar todas as strings.

Configuração no nsclient.ini:

[/settings/external scripts/scripts]
x=scripts\check_test.bat $ARGS$
y=scripts\check_test.bat $ARGS"$

Executando a versão sem aspas:

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)

Executando a versão citada:

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")
    
por 26.11.2013 / 15:41