我正在编写一个自动化脚本。我有一个函数,它接受命令或可执行文件。我必须等到命令或可执行文件完成运行并在失败或通过时返回。我还想将输出写入文件。我正在尝试与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
一片空白。即使错误代码为 0,这也会错误地显示为已通过。
我尝试使用错误代码$LASTEXISTCODE
and $?
. But $?
对于可执行文件来说是正确的并且$LASTEXISTCODE
是命令的空值或垃圾值。我没有主意了,就到这里了。
如有疑问,请阅读文档:
$?
包含上次操作的执行状态。如果最后一个操作成功,则它包含 TRUE;如果失败,则包含 FALSE。
[…]
$最后的代码
包含最后运行的基于 Windows 的程序的退出代码。
基本上,您需要检查两者。$?
表示是否最后一个电源外壳命令/cmdlet 已成功运行,而$LASTEXITCODE
包含退出代码外部程序这是最后执行的。
if (-not $? -or $LASTEXITCODE -ne 0) {
throw '... whatever ...'
} else {
return $ret
}
然而,Invoke-Expression
不是一个很好的执行命令的方法。根据您实际想要执行的内容,可能有更好的方法来执行它,以及更好的错误处理方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)