首页 > 解决方案 > pentaho Kitchen 退出代码无法正常工作

问题描述

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

标签: powershellpentaho-data-integration

解决方案


  • 要同步执行控制台应用程序或批处理文件并捕获它们的输出/检查它们的退出代码,请直接调用它们(c:\path\to\some.exe ...& $exePath ...),不要使用-Start-Process请参阅此答案

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

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

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

C:\pdi-ce-8.1.0.0-371\data-integration\kitchen.bat -file=C:\pdi_debug\debug.kjb -level=MINIMAL >> C:\pdi_debug\bat.log

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

  • Windows PowerShell中:“Unicode”(UTF-16LE)
  • PowerShell (Core) (v6+) 中:无 BOM 的 UTF-8

如果您需要cmd.exe执行附加,请cmd /c改为通过以下方式调用批处理文件:

cmd /c 'C:\pdi-ce-8.1.0.0-371\data-integration\kitchen.bat -file=C:\pdi_debug\debug.kjb -level=MINIMAL >> C:\pdi_debug\bat.log'

注意:由于cmd.exe从外部调用时中继退出批处理文件设置的代码的怪癖,cmd.exe调用批处理文件的最可靠方法是使用cmd /c 并附加到 & exit命令字符串 - 请参阅此答案


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


推荐阅读