首页 > 解决方案 > PowerShell 脚本始终通过,不抛出错误 - “ErrorAction Stop”不捕获异常

问题描述

我有我的静默安装 PowerShell 脚本,但我有一个问题,即使某些参数不正确,我的 powershell 脚本的执行也不会失败。

$expression="C:\app\tool.exe  /COMPUTER=server1  /INSTALL  /SILENT"
try {
Invoke-Expression $expression -ErrorAction Stop
}
catch {
Write-Host "Entered Exception"
}

不幸的是,它总是“绿色”,就像执行成功并且没有抛出错误一样。

但是,在日志中,我可以看到这是设置的“意外取消”。

******************************************************** Error:
Connect to computer registry failed
Computer 'SERVER1' does not exist
The network path was not found.

Unattended setup >>> 'Cancel'
********************************************************
Exit code = 0x4C7

我的脚本没有输入catch子句。是否有可能我可以以某种方式强制它失败,所以我可以捕捉到那个错误。我有一个大问题,我的 powershell 没有失败,尽管它应该是因为它有错误的安装参数。

谢谢!!!

标签: powershell

解决方案


Invoke-Expression仅检查运行命令的可能性,并在可以调用命令时成功。用于$LASTEXITCODE检查输出:

$expression="C:\app\tool.exe  /COMPUTER=server1  /INSTALL"
try {
    $result = Invoke-Expression $expression
    if ($LASTEXITCODE -ne 0) {
        throw $result
    }
}
catch {
    Write-Host "Entered Exception"
    $_
}

推荐阅读