スクリプトを開発し始めると、途中経過を確認しながら開発を進めたいと思うときはありませんか?
このようなときに使用するコマンドレットがWrite-Debugコマンドレットです。
このコマンドレットは、コンソールウィンドウにメッセージを表示するためのコマンドレットです。
コンソールにメッセージを表示するコマンドレットとしてはWrite-Hostコマンドレットがありますが、両者にはどのような違いがあるでしょう?
それは、
- Write-Hostコマンドレットは、実行すれば必ず表示を行う。
- Write-Debugコマンドレットは、$DebugPrefeenceによって表示制御が行われる
という違いがあります。
$DebugPreferenceは下記の3つの値を指定することが可能です。
| 値 |
意味 |
| "Continue" |
Write-Debugに指定されたメッセージを表示 |
| "SilentlyContinue" |
Write-Debugに指定されたメッセージを表示しない。既定値 |
| "Stop" |
Write-Debugに指定されたメッセージを表示した後、動作を停止 |
| "Inquire" |
Write-Debugに指定されたメッセージを表示後、続行するかを確認 |
それでは、下記スクリプト(Debug.ps1とします)を準備して、それぞれについて実験をしてみましょう。
$a = 2
$b = 3
$c = $a + $b
Write-Debug "Line4: $c"
$a = 4
$b = 5
$c = $a + $b
Write-Debug "Line8: $c"
Continue
まずは、下記のようにして $DebugPreferenceの設定を変更します。
PS C:\Work> $DebugPreference = "Continue"
つぎに、作成したスクリプトを実行してみましょう。
PS C:\Work> ./Debug.ps1
デバッグ: Line4: 5
デバッグ: Line8: 9
Write-Debugに指定したメッセージがきちんと表示されていますね。
SilentContinue
まずは、下記のようにして $DebugPreferenceの設定を変更します。
PS C:\Work> $DebugPreference = "SilentlyContinue"
スクリプトを実行します。
PS C:\Work> ./Debug.ps1
PS C:\Work>
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の設定を変更します。
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コマンドレットを使用すれば、デバッグ時のみメッセージを表示すしそれ以外は表示しない、という制御を行うことができますので、是非活用してみてください。