我的代码看起来像这样。
$OutCmd ='somecommand'
$job = start-job -ScriptBlock { Param([string]$InnerSB)
Invoke-Expression $InnerSB
} -ArgumentList $OutCmd
我希望在$ outCmd成功运行时捕获作业输出,或者如果$ outCmd失败则捕获完整的错误消息。我也想知道命令是否失败。
$ job.state没有帮助,即使命令失败也显示为已完成。
我无法保证这适用于所有情况,但通常我会使用以下内容:
function Invoke-Expression-And-Check{
param (
[string]$Expression
)
$er = (invoke-expression $Expression) 2>&1
if($er.Exception){
throw $er.Exception
}
}
2>&1重定向错误输出到标准,它允许您捕获$ er对象,其类型为ErrorRecord。如果它不是错误记录,则不会有异常字段。
一旦出现错误,您可以在try catch中捕获它,或者只是暂停程序。