try-catch ステートメント内に try-catch ステートメントがあります。内側の catch はエラーをキャッチしますが、スローによってエラーが out catch ステートメントでキャッチされることはありません。簡単に言うと、私のスクリプトは次のようにフォーマットされています。
$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 ブロックに「渡される」という問題はありませんでした。