使用PowerShell命令行时未捕获异常但在使用PowerShell ISE时按预期捕获异常

时间:2014-11-10 17:44:37

标签: powershell powershell-v2.0

我正在运行PowerShell 2.0。

我有一个PowerShell脚本,它将记录添加到数据库并返回添加的记录的ID。 记录ID作为DataRow对象(称为new_deal_id)中名为ResultSet的属性返回。

如果数据库端出现问题,则new_deal_id属性可能未设置,或者根本不存在。

为了解决这个问题,我把这个属性的读取包装在try / catch块中,如下所示。

try {
    $ErrorActionPreference = "Stop"
    $ResultSet = Read-DatabaseData -OdbcCommand $OdbcCommand -SqlQuery $Sql
    $NewDealID = $ResultSet.new_deal_id
}
catch {
    throw
}
finally {
    $ErrorActionPreference = "Continue"
}

如果我使用PowerShell ISE或PowerGui运行脚本,当属性不存在时,下面显示的异常会被捕获

Property 'new_deal_id' cannot be found on this object. Make sure that it exists.
At line:1 char:12
+ $ResultSet. <<<< newdeal
    + CategoryInfo          : InvalidOperation: (.:OperatorToken) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : PropertyNotFoundStrict

但是,如果我从PowerShell命令行运行脚本,则不会捕获异常并且脚本会继续,就像没有发生错误一样。

为什么PowerShell命令行在属性不存在时没有捕获异常?

1 个答案:

答案 0 :(得分:1)

这可能是因为您在运行脚本的控制台中没有启用严格模式。(Powershell和ISE使用不同的配置文件)

要启用严格模式,请使用Set-Strictmode cmdlet。

示例:

Set-StrictMode -Version latest