qshinoの日記

Powershell関係と徒然なこと

Powershell 例外処理

PowerShell 例外処理

例外処理には二種類。

  1. Trap [例外] {}
  2. Try{}Catch[例外]{}Finally{}

Trap

書式: Trap [例外] {例外処理}

Trap例外処理中の break,continue

  • break: 処理を終了する。
  • continue: 処理を継続する。

Try Catch

書式: Try{}Catch[例外]{}Finally{}

Throw

書式: Throw 文字列

どの例外をThrowするのか?

$Error

$Error[0]に最新のErrorそれ以降に過去のErrorが入っている。

$ErrorActionPreference

  • Stop
  • Continue
  • SilentlyContinue

Trapのスコープ?

  1. 現スコープから外に向かってTrapが探索される
  2. break break文のスコープから抜け、外側のスコープのTrap処理を実行。
  3. continue そのスコープ内で次の処理を実行。

説明用の例

trap { continue } continue0
Func1 {
  trap { break } # break1
  Func2 {
    trap { continue } # continue2
    Func3 {
       trap { break } # break3
       1/0 # exception3
        $a = 3 # sentence3
    }
    Func3
    $a=2 # sentence2
  }
   Func2
   2/0 # exception1
   $a=4 # sentence1
}
Func1
$a=5 # sentence0

上記exception3により、break3 が処理され、sentence3を実行せずにFunc3を抜ける。その後、continue2が処理され、Func3の次のsentence2を実行する。

その後、exception1によりbreak1 -> (sentence1 skip) -> continue0 -> sentence0が実行される。

参考

http://capm-network.com/?tag=PowerShell例外処理

スコープ http://mtgpowershell.blogspot.jp/2011/04/trap.html?m=1