如何在powershell中使用错误处理来在后台运行invoke-expression?

问题描述 投票:0回答:1

我的代码看起来像这样。

$OutCmd ='somecommand'
$job = start-job -ScriptBlock { Param([string]$InnerSB)
    Invoke-Expression $InnerSB
} -ArgumentList $OutCmd

我希望在$ outCmd成功运行时捕获作业输出,或者如果$ outCmd失败则捕获完整的错误消息。我也想知道命令是否失败。

$ job.state没有帮助,即使命令失败也显示为已完成。

powershell error-handling
1个回答
0
投票

我无法保证这适用于所有情况,但通常我会使用以下内容:

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中捕获它,或者只是暂停程序。

© www.soinside.com 2019 - 2024. All rights reserved.