はじめに
この連載では、Microsoftが提供している新しいシェル「Windows Power Shell」の使い方を解説します。今回はPowerShellにおけるデバッグ方法について説明します。
これまでの記事
- Windows PowerShell 入門(1)-基本操作編
- Windows PowerShell 入門(2)-基本操作編 2
- Windows PowerShell 入門(3)-スクリプト編
- Windows PowerShell 入門(4)-変数と演算子編
- Windows PowerShell 入門(5)-制御構文編
- Windows PowerShell 入門(6)-関数編1
- Windows PowerShell 入門(7)-関数編2
- Windows PowerShell 入門(8)-関数編3
- Windows PowerShell 入門(9)-エラー編
対象読者
- Windows PowerShellでコマンドレット操作ができる方
- 何らかのプログラミング経験があればなお良い
必要環境
- Windows PowerShell
デバッグメッセージの出力
PowerShellではデバッグ用のメッセージを表示しながら開発が行えるように、Write-Debugという専用のコマンドレットを備えています。
コンソールにメッセージを表示するコマンドレットとしてはWrite-Hostコマンドレットがありますが、両者には次のような違いがあります。
- Write-Hostコマンドレットは、実行すれば必ず表示を行う。
- Write-Debugコマンドレットは、
$DebugPreference
シェル変数によって表示制御が行われる
$DebugPreference
シェル変数はデバッグ時の振る舞いを変更する特殊な変数であり、下記の4つの値を指定することが可能です。
値 | 説明 |
"Continue" | Write-Debugに指定されたメッセージを出力 |
"SilentlyContinue" | Write-Debugに指定されたメッセージを出力しない |
"Stop" | Write-Debugに指定されたメッセージを出力した後、動作を停止 |
"Inquire" | Write-Debugに指定されたメッセージを出力後、続行するかを確認 |
下記スクリプトを準備して(ここでは「C:\Work\Debug.ps1」として保存)、$DebugPreference
シェル変数のそれぞれの値の挙動を確認してみたいと思います。
$a = 2 $b = 3 $c = $a + $b Write-Debug "Line4: $c" $a = 4 $b = 5 $c = $a + $b Write-Debug "Line8: $c"
Debug.ps1の各行の意味は下記の通りです。
- 1行目:$aに2を代入
- 2行目:$bに3を代入
- 3行目:$aと$bの和を$cに代入
- 4行目:Write-Debugコマンドレットによる文字列の出力。ここでは「Line4:」と変数$cに代入された値が連結した文字列を出力。
- 5行目:$aに4を代入
- 6行目:$bに5を代入
- 7行目:$aと$bの和を$cに代入
- 8行目:Write-Debugコマンドレットによる文字列の出力。ここでは「Line8:」と変数$cに代入された値が連結した文字列を出力。
Continue
$DebugPreference
に値Continue
を設定した場合の動作を見てみましょう。
まずは、下記のようにして $DebugPreference
の設定を変更します。
PS C:\Work> $DebugPreference = "Continue"
次に、作成したスクリプトを実行してみましょう。
PS C:\Work> ./Debug.ps1 デバッグ: Line4: 5 デバッグ: Line8: 9
Write-Debug
コマンドレットに指定したメッセージを出力することがわかります。
SilentlyContinue
$DebugPreference
に値SilentlyContinue
を設定した場合の動作を見てみましょう。
まずは、下記のようにして $DebugPreference
シェル変数の設定を変更します。
PS C:\Work> $DebugPreference = "SilentlyContinue"
スクリプトを実行します。
PS C:\Work> ./Debug.ps1 PS C:\Work>
スクリプト中の4行目と8行目にあるWrite-Debugに指定したメッセージは出力されずに終了することがわかります。
Stop
$DebugPreference
に値Stop
を設定した場合の動作を見てみましょう。
まずは、下記のようにして $DebugPreference
シェル変数の設定を変更します。
PS C:\Work> $DebugPreference = "Stop"
スクリプトを実行します。
PS C:\Work> ./Debug.ps1 デバッグ: Line4: 5 Write-Debug : シェル変数 "DebugPreference" が Stop に設定されているため、コマンドの実行が停止されました 発生場所 C:\Work\Debug.ps1:4 文字:12 + Write-Debug <<<< "Line4: $c"
1つめのWrite-Debugで指定されたメッセージを表示した後、エラーメッセージを表示して処理を中断することが分かります。
Inquire
$DebugPreference
に値Inquire
を設定した場合の動作を見てみましょう。
まずは、下記のようにして $DebugPreference
シェル変数の設定を変更します。
PS C:\Work> $DebugPreference = "Inquire"
スクリプトを実行します。
PS C:\Work> ./Debug.ps1 デバッグ: Line4: 5 確認 この操作を続行しますか? [Y] はい(Y) [A] すべて続行(A) [H] コマンドの中止(H) [S] 中断(S) [?] ヘルプ (既定値は "Y"):
1つめのWrite-Debug
で指定されたメッセージを表示した後に、スクリプトを実行するかを確認してくることがわかります。
ここで[Y]または[A]を押すと、スクリプトが続行されます。
確認 この操作を続行しますか? [Y] はい(Y) [A] すべて続行(A) [H] コマンドの中止(H) [S] 中断(S) [?] ヘルプ (既定値は "Y"): デバッグ: Line8: 9 確認 この操作を続行しますか? [Y] はい(Y) [A] すべて続行(A) [H] コマンドの中止(H) [S] 中断(S) [?] ヘルプ (既定値は "Y"):
このように、Write-Debugコマンドレットと$DebugPreference
変数を使用することで、デバッグメッセージの出力の振る舞いを制御することが可能です。