pentaho Kitchen退出代码工作不正常



我正在通过PowerShell脚本执行我的工作,但厨房出口返回代码似乎不起作用。。。基于我在下面阅读的文档,是厨房的返回代码

  • 0=作业/转换运行时没有出现问题。

  • 1=处理过程中发生错误。

  • 2=加载/运行作业/转换期间发生意外错误。基本上,它可以是XML格式中的错误、读取文件时的错误,也可以表示存储库连接存在问题。

  • 3=无法连接到数据库、打开文件或其他初始化错误。

  • 7=无法从XML或存储库加载作业/转换;基本上,可能是plugins/文件夹中的某个插件编写不正确或不兼容。

  • 8=加载步骤或插件时出错(主要是加载其中一个插件时出错(。

  • 9=命令行用法打印。

    $FilePath = 'C:pdi-ce-8.1.0.0-371data-integrationkitchen.bat'
    $ArgumentList = '-file=C:pdi_debugdebug.kjb -level=MINIMAL >> 
    C:pdi_debugbat.log'
    $PDIProcess = Start-Process -Filepath $FilePath -ArgumentList 
    $ArgumentList -Wait -PassThru
    Write-host "The Exit code from Kitchen is " $LastExitCode
    If($LastExitCode  -eq 0) #This doesn't seem to correctly get the exit 
    code we are wanting :-/
    {
    $EMAIL_SUBJECT='INT: Pentaho_J_load SUCCEEDED'
    }
    Else
    {
    $EMAIL_SUBJECT='INT: Pentaho_J_load FAILED'
    
  • 若要同步执行控制台应用程序或批处理文件并捕获其输出/检查其退出代码,请直接调用(c:pathtosome.exe ...& $exePath ...(,不要使用使用Start-Process-请参阅此答案。

    • 使用Start-Process时,获取流程退出代码的唯一方式是通过流程信息对象(类型为[System.Diagnostics.Process](由-PassThru开关及其.ExitCode属性返回(带有-Wait,此属性可立即访问;如果没有它,必须使用.WaitForExit(),或轮询.HasExited属性(。

    • 相比之下,只有在直接调用外部程序之后(通过直接调用它,或者如果路径需要引用和/或涉及变量引用,则通过调用运算符&(,才会设置自动$LASTEXITCODE变量。

因此,直接调用批处理文件,然后检查$LASTEXITCODE

C:pdi-ce-8.1.0.0-371data-integrationkitchen.bat -file=C:pdi_debugdebug.kjb -level=MINIMAL >> C:pdi_debugbat.log

注意:这将使PowerShell附加到文件C:pdi_debugbat.log的(>>(,这意味着总是[1]使用以下字符编码:

  • Windows PowerShell中:";Unicode";(UTF-16LE(
  • PowerShell(核心((v6+(中:无BOM UTF-8

如果需要cmd.exe执行追加,请改为通过cmd /c调用批处理文件:

cmd /c 'C:pdi-ce-8.1.0.0-371data-integrationkitchen.bat -file=C:pdi_debugdebug.kjb -level=MINIMAL >> C:pdi_debugbat.log'

注意:由于cmd.exe在从cmd.exe外部调用时如何中继批处理文件设置的退出代码有一些奇怪之处,调用批处理文件最稳健的方法是使用cmd /c& exit附加到命令字符串中-请参阅此答案。


[1]在PowerShell 5.1及以上版本中,可以控制>/>>使用的默认编码,尽管方式不明显:请参阅此答案

相关内容

  • 没有找到相关文章

最新更新