我正在运行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命令行在属性不存在时没有捕获异常?
答案 0 :(得分:1)
这可能是因为您在运行脚本的控制台中没有启用严格模式。(Powershell和ISE使用不同的配置文件)
要启用严格模式,请使用Set-Strictmode
cmdlet。
示例:
Set-StrictMode -Version latest