check_nrpe将$放在check字符串的末尾

时间:2014-02-12 15:50:26

标签: powershell nagios dollar-sign

我的PowerShell nagios脚本出现问题,安装在带有NRPE_NT守护程序的MS Windows Server 2008 64位上。

我已经宣布了这样的命令:

command[check_files]=cmd /c echo C:\nrpe\libexec\check_file.ps1 $ARG1$; exit($lastexitcode) | powershell.exe -command - 

我将ExecutionPolicy设置为不受限制的

我在控制台上重启了NRPE_NT服务并声明了命令,如下所示:

$USER1$/check_nrpe -H $HOSTADDRESS$ -t 60 -c check_files -a $ARG1$

现在,为什么我在本地运行它,效果很好:

C:\>cmd /c echo C:\nrpe\libexec\_file.ps1 C:\nrpe; exit($lastexitcode)| powershell.exe -command -
No file/s present with this string

但如果我通过check_nrpe运行它,我会收到此输出:

使用-Co​​mmand参数指定

' - ':不允许使用-Co​​mmand的其他参数。

在调试模式下,在NRPE.log上我可以看到:

  

运行命令:cmd / c echo C:\ nrpe \ libexec \ check_file.ps1 C:\ nrpe;   退出($ lastexitcode)| powershell.exe -command - $

     

命令已完成,返回码为0

为什么以这种方式,check_nrpe在结束字符串处添加一个美元字符($),使整个控件脱轨?

提前致谢

1 个答案:

答案 0 :(得分:1)

我不确定这是否会对你的情况有所帮助,但我只是在我的环境中找到了导致类似情况的东西。这是我的NRPE命令配置:

command[foo]=grep file '^pattern$'

一切都很好,直到我想在'^pattern$'参数之后添加另一个参数...新参数(在命令行的末尾)会在末尾附加额外的$

似乎NRPE需要转义$,否则它会认为它是一个变量引用并且对它做了奇怪的事情。我期待引用会使它不需要转义,但NRPE的配置文件不遵循shell风格的引用规则。因此,将我的NRPE配置更改为此解决了我的问题:

command[foo]=grep file '^pattern$$'

请注意修订后的NRPE命令定义中的双$$