2014-08-27 81 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 - 

現在它工作正常。退出代碼和腳本輸出是正確的。