我的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运行它,我会收到此输出:
使用-Command参数指定' - ':不允许使用-Command的其他参数。
在调试模式下,在NRPE.log上我可以看到:
运行命令:cmd / c echo C:\ nrpe \ libexec \ check_file.ps1 C:\ nrpe; 退出($ lastexitcode)| powershell.exe -command - $
命令已完成,返回码为0
为什么以这种方式,check_nrpe在结束字符串处添加一个美元字符($),使整个控件脱轨?
提前致谢
答案 0 :(得分:1)
我不确定这是否会对你的情况有所帮助,但我只是在我的环境中找到了导致类似情况的东西。这是我的NRPE命令配置:
command[foo]=grep file '^pattern$'
一切都很好,直到我想在'^pattern$'
参数之后添加另一个参数...新参数(在命令行的末尾)会在末尾附加额外的$
似乎NRPE需要转义$
,否则它会认为它是一个变量引用并且对它做了奇怪的事情。我期待引用会使它不需要转义,但NRPE的配置文件不遵循shell风格的引用规则。因此,将我的NRPE配置更改为此解决了我的问题:
command[foo]=grep file '^pattern$$'
请注意修订后的NRPE命令定义中的双$$
。