web-dev-qa-db-ja.com

NSClient ++:オプションの引数を持つ外部スクリプト

WindowsのNSClient ++ 0.4.1でオプションの引数を取る外部スクリプトを定義しようとしています。私が定義したnsclient-full.iniサンプルコードに従って

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

これは、NRPEを介した呼び出しで何を指定しても、myscript.ps1に唯一の引数として渡される文字列%ARGS%を生成します(重要な場合はNagiosのcheck_nrpeを使用) 。次に、定義を次のように書き直そうとしました

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

myscript.ps1は最大2つの引数を取ります)、これは少し役に立ちます。少なくとも、2つの引数が指定されている場合は、args[]配列を介してそれらをフェッチできます。呼び出しの引数が2つ未満の場合に問題が発生します。この場合、リテラル文字列$ARG2$ARG1$が引数として渡されます。 myscript.ps1のコードでこのケースを処理すると、引数処理ルーチン全体がせいぜい醜くなります。

パラメータが指定されていない場合にNSClientの変数名を渡さない外部スクリプトにオプションパラメータを定義する正しい方法はありますか?

2
the-wabbit

まず、%ARGS%の色合いはラッパー(これは別のものです)用です。混乱を少なくするために、$ ARGS $の名前を変更する必要がありますか?

とにかく、0.4.2.61より前のNSClient ++は変数引数をサポートしていません。これは0.4.2.61で追加されましたが、このチケットの要求に従って。

NSClient ++ 0.4.2.61以降、2つの新しいオプション$ 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")
3
Michael Medin