Exception handling on PowerShell
あまりPowerShellを使用しないため知らなかったPowerShellでの例外処理について
実行環境
使用するPowerShellのバージョンは以下の通り(詳細は省略)
> $PSVersionTable
Name Value
---- -----
PSVersion 7.3.4
リダイレクト
PowerShellでは複数の出力ストリームが用意されており,これらのストリームには特定のコマンド(PowerShellでいうコマンドレット)やリダイレクトを使用して書き込むことが可能。 一部を除き,出力ストリームのリダイレクトがサポートされている。
リダイレクト演算子
PowerShellのリダイレクトでは次のような演算子が用意されている。 ただし成功ストリーム(1)は規定値なので省略可能。
|演算子|概要|構文| | :– | :—— | : –| |>|指定したストリームのファイルへの書き込み(上書き)|n>| |»|指定したストリームのファイルへの書き込み(追加)|n»| |>&1|指定したストリームをSuccessストリームにリダイレクト|n>&1|
ここで,n
はストリーム番号を表す。
出力ストリーム
ストリーム | 詳細 | 導入バージョン | Writeコマンドレット |
---|---|---|---|
1 | Successストリーム | PowerShell 2.0 | Write-Output |
2 | Errorストリーム | PowerHhell 2.0 | Write-Error |
3 | Warningストリーム | PowerShell 3.0 | Write-Warning |
4 | Verboseストリーム | PowerShell 3.0 | Write-Warning |
5 | Debugストリーム | PowerShell 3.0 | Write-Debug |
6 | Informationストリーム | PowerShell 5.0 | Write-Information, Write-Host |
N/A | Progresssストリーム | PowerShell 2.0 | Write-Progress |
* | すべてのストリーム | PowerShell 3.0 |
※ただしProgressリダイレクトはサポートなし
PowerShellのエラー処理
PowerShellでは終了エラーと終了しないエラーが存在する。
ステートメント終了エラー及びスクリプト終了エラーはtry
ステートメントを使用してトラップすることができる。
> try{
date -j
}
catch{
echo ($PSItem.Exception.Message) > .\test.log
continue
}
エラーは$error
や$PSItem.Exception.Message
で参照できる。