繁体   English   中英

Powershell尝试/捕获重新抛出不传播错误(Powershell 2.0)

[英]Powershell try/catch rethrow not propagating error (Powershell 2.0)

我在try-catch语句中有一个try-catch语句。 内部catch捕获错误,但是throw不会导致错误被out捕获语句捕获。 简而言之,我的脚本的格式类似于:

$ErrorPreference = "Stop"

try
{
     getStuffFromDB

     putStuffInDB
}
catch
{
     write-host ("Error: " + $error[0])
}

function getStuffFromDB
{
     try
     {
          -- database query statement
     }
     catch
     {
          throw
     }
     finally
     {
          close connection and clean up
     }
}

function putStuffInDB
{
     try
     {
          -- database insert statements statement
     }
     catch
     {
          throw
     }
     finally
     {
          close connection and clean up
     }
}

当我运行脚本时,没有错误,但是我注意到试图填充的SQL Server数据库缺少数据。 当我在调试中重新运行脚本时,函数'putStuffInDB'出现了一个错误,该错误在catch块中捕获。 但是当我跨步时,该消息并没有“抛出”到外部catch块,而是处理了finally块并终止了。

我显然缺少了一些我没有看到的东西。 我过去在C#中使用过该构造,但从未遇到过将错误“传递”到外部catch块的问题。

我没有看到这种行为。 我在PowerShell ISE中运行了以下命令,它产生了预期的结果。 实际上,数据库中的错误是否没有被抛出为异常? 我相信,例如在SQL Server中,在给定错误级别下的某些错误不会作为异常返回ADO.NET提供程序。

$ErrorActionPreference = 'Stop'

function Throw1 {
    try {
        Write-Host "Throw1.Try"
        throw "Error from Throw1"
    }
    catch { 
        Write-Host "Throw1.Catch"
        throw
    }
    finally {
        Write-Host "Throw1.Finally"
    }
}

function Throw2 {
    try {
        Write-Host "Throw2.Try"
        throw "Error from Throw2"
    }
    catch {
        Write-Host "Throw2.Catch"
        throw
    }
    finally {
        Write-Host "Throw2.Finally"
    }
}

function Test {
    try {
        Throw1
        Throw2
    }
    catch {
        Write-Host $error[0]
    }
}

Test

产生以下内容:

Throw1.Try
Throw1.Catch
Throw1.Finally
Error from Throw1

您要设置的变量是$ ErrorActionPreference,而不是$ ErrorPreference。

(Josh确实设置了正确的变量。)

我意识到问题出在我自己身上。 在创建SQLServer条目的POSH函数中,我返回了所创建数据集的主键。 函数的设计使得函数将返回主键。 设计上的错误是,我在finally块中放置了一个return语句,该语句取代了将抛出返回到外部捕获的过程。 我更改了设计,删除了return语句。 尝试/捕获现在可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM