powershell - pentaho Kitchen 退出代码无法正常工作
问题描述
我正在通过 PowerShell 脚本执行我的工作,但是厨房退出返回代码似乎不起作用...根据我在下面阅读的文档是厨房的返回代码
0 = 作业/转换运行没有问题。
1 = 处理过程中发生错误。
2 = 在加载/运行作业/转换期间发生意外错误。基本上,它可能是 XML 格式的错误,读取文件的错误,或者它可以表示存储库连接存在问题。
3 = 无法连接到数据库、打开文件或其他初始化错误。
7 = 无法从 XML 或存储库加载作业/转换;基本上,可能是 plugins/ 文件夹中的插件之一没有正确写入或不兼容。
8 = 加载步骤或插件时发生错误(主要是加载其中一个插件时出错)。
9 = 命令行使用打印。
$FilePath = 'C:\pdi-ce-8.1.0.0-371\data-integration\kitchen.bat' $ArgumentList = '-file=C:\pdi_debug\debug.kjb -level=MINIMAL >> C:\pdi_debug\bat.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:\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 及更高版本中,可以>
控制/使用的默认编码>>
,尽管方式不明显:请参阅此答案。
推荐阅读
- javascript - 如何将一个 JavaScript 文件导入另一个 JavaScript 文件
- excel - Powershell 使用 excel 查找值,更改名称文件夹并移动它们;无匹配
- javascript - 在 ReactJS 中处理 onKeyPress 事件
- powershell - ForEach 只读取第一行文本
- r - 在 R 中使用自定义函数正确迭代
- ios - 未知类型名称“RLMSyncCredentials”;您的意思是“RLMCredentials”吗?
- java - JComboBox - 箭头和标签之间的填充/间距
- javascript - 单击全屏按钮时如何旋转屏幕?
- html - 如何转换从 S3 存储桶检索到的流以在我的 React 前端将其用作 jpeg 图像?
- python - 用另外两列替换一列中的 NaN 值