我在Informatica forums上问了这个问题,但是没有人知道答案,所以现在我来这里寻求帮助。
据我了解,“会话后成功命令”字段中的任何内容都应传递到相应的命令界面并执行。但是,当我使用IF语句时,它会失败。有什么想法吗?
"IF 1==1 echo.bob >> f:\filename.txt"
当我手动输入终端(本例中是DOS)时,这是有效的。但当我把它扔进一个可重用的命令任务时,我得到了这个:
ERROR
POST-SESS
CMN_1949
错误:[前/后会话命令]进程ID 2996. shell命令失败,退出代码为1。
PS:使用9.5.1 Hotfix 1
答案 0 :(得分:0)
我认为问题不在于Informatica如何执行命令。问题在于DOS如何返回错误代码,特别是某些命令,如IF
和ECHO
没有。 (在DOS中可以看到来自DOS的返回代码Informatica从echo %ERRORLEVEL%
看到,为了方便,我将在这里使用DOS名称,即使在Windows下现在这不是严格正确的)
连续运行这些命令:
REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 0
cd c:\
echo %ERRORLEVEL%
REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged
echo.bob >> c:\filename.txt
echo %ERRORLEVEL%
REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged
echo.bob >> c:\thisdirdontexist\filename.txt
echo %ERRORLEVEL%
第一个CD
设置返回码,在本例中为0
以下ECHO
(有或没有IF测试)不会更改返回码,因此即使最后ECHO
失败,它也会保持为0。
如果第一个CD
命令返回错误;
@echo off
REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 1
cd xxxxxx
echo %ERRORLEVEL%
然后所有后续的ECHO
都会返回1而Informatica会使它们都失败。
这说它仍然很奇怪,因为Informatica中的每个会话后成功命令都是在它自己的cmd-shell下执行的,所以每个命令的初始ERRORLEVEL
应该总是为0.我无法解释这个和不幸的是,当我们在UNIX下运行时,我实际上无法在Informatica中测试它,但我很确定这至少是问题的一部分。
要解决此问题,您应确保在属性选项卡上设置“任务命令失败时失败”选项。这使得Informatica使用cmd/c
选项,因为这设置了正确的返回代码,Informatica应该能够正确地获取错误(或成功)。如果仍然无法正常工作,请尝试将命令更改为:
cmd /c "IF 1==1 echo.uncle >> c:\filename.txt"