hexecp return code
search cancel

hexecp return code

book

Article ID: 186879

calendar_today

Updated On:

Products

CA Harvest Software Change Manager CA Harvest Software Change Manager - OpenMake Meister

Issue/Introduction

The return codes of the invoked remote program executed by hexecp are not being passed as expected.

This occurs when the return code of the remote program is > 0
The remote program is invoked and returns an exit code > 0, but the hexecp returns, in any case, an exit code of 3.

Expected:
According to the documentation, if the remote program is found and invoked, the return code of the program should be then passed to the return code of hexcep.

Return Codes - Special Case - hexecp

Environment

CA Harvest Software Change Manager - All versions

Resolution

%ERRORLEVEL% is always the exit code of the last executed program.

When hexecp invokes a batch file directly, the return code of the batch file will get set to %ERRORLEVEL%

hexecp returns 3 for all anticipated failures of the invoked program. So all non-zero return codes from the -prg option will get converted as 3 and returned.

If hexecp is executed through a batch file or any script file, the executed program will be hexecp.
So the return code of hexecp is getting set to %ERRORLEVEL%

Finally, the conclusion is
- When we run hexecp from other scripts, %ERRORLEVEL% would be the return code of hexecp. It does not return the exit code of the program mentioned in -prg option.
- We can suggest a workaround as described in the "Additional Information."

Additional Information

This is an example to reproduce, and a workaround proposed for the same:

Set up a test with the following batch script named testExitCode.bat

REM ----------
@echo off
echo Exiting with error code %1
exit /b %1
REM ----------

 
Then, execute that from hexecp with various exit codes.  Hexecp’s return message always reports the correct return code:

C:\Users\Administrator>hexecp -m %computername% -rport 9000 -usr Administrator -pw <pwd> -syn -prg "C:\Users\Administrator\testExitCode.bat 5"
Attempting to log into remote agent...
Connected to remote agent.
Exiting with error code 5
ERROR: Execution of program C:\Users\Administrator\testExitCode.bat 5 has failed. Exit code : 5.

C:\Users\Administrator>hexecp -m %computername% -rport 9000 -usr Administrator -pw <pwd> -syn -prg "C:\Users\Administrator\testExitCode.bat 15"
Attempting to log into remote agent...
Connected to remote agent.
Exiting with error code 15
ERROR: Execution of program C:\Users\Administrator\testExitCode.bat 15 has failed. Exit code : 15.

C:\Users\Administrator>hexecp -m %computername% -rport 9000 -usr Administrator -pw <pwd> -syn -prg "C:\Users\Administrator\testExitCode.bat 0"
Attempting to log into remote agent...
Connected to remote agent.
Exiting with error code 0
Execution of program: C:\Users\Administrator\testExitCode.bat 0 was successful.

Then embed hexecp in a wrapper script named tryit.bat:

REM ----------
@echo off
hexecp -m %computername% -rport 9000 -usr Administrator -pw <pwd> -syn -prg "C:\Users\Administrator\testExitCode.bat %1"
echo hexecp is done, exit code was %ERRORLEVEL%
REM ----------
 
No matter what the exit code was returned from the batch script, if it’s not 0, the error code returned from hexecp is 3

C:\Users\Administrator>tryit 5
Attempting to log into remote agent...
Connected to remote agent.
Exiting with error code 5
ERROR: Execution of program C:\Users\Administrator\testExitCode.bat 5 has failed. Exit code : 5.
hexecp is done, exit code was 3

C:\Users\Administrator>tryit 15
Attempting to log into remote agent...
Connected to remote agent.
Exiting with error code 15
ERROR: Execution of program C:\Users\Administrator\testExitCode.bat 15 has failed. Exit code : 15.
hexecp is done, exit code was 3

C:\Users\Administrator>tryit 0
Attempting to log into remote agent...
Connected to remote agent.
Exiting with error code 0
Execution of program: C:\Users\Administrator\testExitCode.bat 0 was successful.
hexecp has been executed successfully.
hexecp is done, exit code was 0

Hexecp reports the script’s return code in the message it returns but doesn’t carry it forward as the exit code from hexecp. 
The workaround would be to capture the exit code from hexecp’s return message in the wrapper script.  

Example:
 
REM ----------
@echo off
setlocal enabledelayedexpansion
set _cmd=hexecp -m %computername% -rport 9000 -usr Administrator -pw <pwd> -syn -prg "C:\Users\Administrator\testExitCode.bat %1"
for /f "usebackq skip=3 tokens=4 delims=:" %%a in (`%_cmd%`) do set _errcode=%%a
echo hexecp is done, exit code was %_errcode%
REM ----------

When executing this last example, we can know what the actual return code was

C:\Users\Administrator>tryit 5
hexecp is done, exit code was  5.