如何捕获使用Invoke-Expression调用的Powershell脚本中的错误?

时间:2016-09-10 15:34:55

标签: powershell

我使用Invoke-Expression从另一个调用一个PS脚本,但我无法确定必须从调用脚本中检测到其他脚本失败了。实际上我只是希望调用脚本在这种情况下停止,我希望$ ErrorActionPreference =“Stop”可以解决问题。

调用脚本:

$ErrorActionPreference = "Stop"
$psCommand = ".\Work.ps1 -a -b " + $var
Invoke-Expression $psCommand

# More work

Work.ps1:

param
(
    [string]$a,
    [switch]$b = $false
)
$ErrorActionPreference = "Stop"

# Do Stuff

If ($x -ne 0) 
{
    Write-Output ("Stuff failed")
    Exit 2
}

这不起作用。在Work.ps1退出代码2后,调用脚本不会停止。我是否需要在调用脚本中使用try-catch?或者我需要查看$ error? (似乎很复杂)

1 个答案:

答案 0 :(得分:0)

这是有效的,因为我使用$ ErrorActionPreference =“Stop”。否则我应该抛出:

param
(
    [string]$a,
    [switch]$b = $false
)
$ErrorActionPreference = "Stop"

# Do Stuff

If ($x -ne 0) 
{
    Write-Error ("Stuff failed")
}