我正在编写自动化脚本。我有一个需要命令或可执行文件的函数。我不得不等到命令或可执行文件完成运行,如果失败或通过则返回。我也想将输出写入文件。我正在尝试使用Start-Job
cmdlet。
我当前的代码:
$job = Start-Job -scriptblock {
Param($incmd)
$ret = Invoke-Expression $incmd -ErrorVariable e
if ($e) {
throw $e
} else {
return $ret
}
} -ArumentList $outcmd
Wait-Job $job.id
"write the output to file using receive-job and return if passed or failed"
这对于命令来说效果很好,但是对于可执行文件,无论错误代码如何,
$e
的值为null。即使错误代码为0,也会错误地显示已通过。我尝试使用
$LASTEXISTCODE
和$?
使用errorcode。但是$?
对于可执行文件是正确的,而$LASTEXISTCODE
对于命令来说是null或垃圾值。我没有主意,被打到这里。 最佳答案
如有疑问,请阅读documentation:
基本上,您需要同时检查两者。 $?
指示上一个PowerShell命令/cmdlet是否已成功运行,而$LASTEXITCODE
包含上次执行的外部程序的退出代码。
if (-not $? -or $LASTEXITCODE -ne 0) {
throw '... whatever ...'
} else {
return $ret
}
但是,
Invoke-Expression
不是执行命令的很好方法。根据您实际想要执行的操作,可能有更好的方法以及更好的错误处理方法。关于powershell - 如何处理要在Start-Job中运行的命令的错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45738707/