2014-08-27 84 views
0

我有一个问题,使用powershell脚本插件,与我的nagios代理(NRPE_NT.exe)。 为了解决这个问题,我创建下面的一层批处理文件:我的批处理文件包装关闭Powershell儿童会话

@ECHO OFF 

SET SCRIPTPATH=%~d0%~p0check_process_mem.ps1 

SET ARGS=%* 
IF [%ARGS%] NEQ [] GOTO ESCAPE_ARGS 

:POWERSHELL 
PowerShell.exe -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Unrestricted -Command "& { $ErrorActionPreference = 'Stop'; & '%SCRIPTPATH%' @args; EXIT $LASTEXITCODE }" %ARGS% 
EXIT /B %ERRORLEVEL% 

:ESCAPE_ARGS 
SET ARGS=%ARGS:"=\"% 
SET ARGS=%ARGS:`=``% 
SET ARGS=%ARGS:'=`'% 
SET ARGS=%ARGS:$=`$% 
SET ARGS=%ARGS:{=`{% 
SET ARGS=%ARGS:}=`}% 
SET ARGS=%ARGS:(=`(% 
SET ARGS=%ARGS:)=`)% 
SET ARGS=%ARGS:,=`,% 
SET ARGS=%ARGS:^%=% 

GOTO POWERSHELL 

现在,如果我运行它作为对话的用户,我没有任何问题,但如果我以SYSTEM用户,PowerShell会话没有按运行关闭,我必须从任务列表中杀死它。 我能做些什么来解决这个问题?

P.S.我不能更新NRPE_NT.exe代理NSClient ++(PowerShell的合规性),为他人的问题...提前

+1

您可以尝试使用'psexec -s -i powershell.exe'以系统用户身份启动PowerShell控制台,然后播放您的脚本并查看会发生什么 – 2014-08-27 13:23:38

+0

我尝试在我的计算机上安装服务,然后模拟(psexec -s -i powershell.exe和脚本运行)它可以正常工作。不幸的是我不能安装它在服务器上(它必须工作) – clarkseth 2014-08-27 14:17:35

+0

当我杀死PowerShell进程,输出发送到Nagios控制台正确(退出代码除外)。 – clarkseth 2014-08-28 09:44:51

回答

0

我已经解决了这个问题PowerShell的插件

感谢,没有包装的批处理文件。我用这种方式声明nrpe.cfg:

command[check_X]=cmd /c echo C:\nrpe\libexec\check_process_mem.ps1 $ARG1$ -VM_w "$ARG2$" -VM_c "$ARG3$" ; exit $($LastExitCode) | powershell.exe -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Unrestricted -command - 

现在它工作正常。退出代码和脚本输出是正确的。