Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Windows PowerShell 入門(10)-デバッグ編

デバッグ処理

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/10/15 14:00

この連載では、Microsoftが提供している新しいシェル、Windows PowerShellの使い方を解説します。今回は、PowerShellがもち備えているデバッグ機能について説明します。

目次

はじめに

 この連載では、Microsoftが提供している新しいシェル「Windows Power Shell」の使い方を解説します。今回はPowerShellにおけるデバッグ方法について説明します。

これまでの記事

対象読者

  • Windows PowerShellでコマンドレット操作ができる方
  • 何らかのプログラミング経験があればなお良い

必要環境

  • Windows PowerShell

デバッグメッセージの出力

 PowerShellではデバッグ用のメッセージを表示しながら開発が行えるように、Write-Debugという専用のコマンドレットを備えています。

 コンソールにメッセージを表示するコマンドレットとしてはWrite-Hostコマンドレットがありますが、両者には次のような違いがあります。

  • Write-Hostコマンドレットは、実行すれば必ず表示を行う。
  • Write-Debugコマンドレットは、$DebugPreferenceシェル変数によって表示制御が行われる

 $DebugPreferenceシェル変数はデバッグ時の振る舞いを変更する特殊な変数であり、下記の4つの値を指定することが可能です。

$DebugPreferenceに指定できる4つの値
説明
"Continue" Write-Debugに指定されたメッセージを出力
"SilentlyContinue" Write-Debugに指定されたメッセージを出力しない
"Stop" Write-Debugに指定されたメッセージを出力した後、動作を停止
"Inquire" Write-Debugに指定されたメッセージを出力後、続行するかを確認

 下記スクリプトを準備して(ここでは「C:\Work\Debug.ps1」として保存)、$DebugPreferenceシェル変数のそれぞれの値の挙動を確認してみたいと思います。

C:\Work\Debug.ps1
$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"

 次に、作成したスクリプトを実行してみましょう。

C:\Work\Debug.ps1の実行
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シェル変数の設定を変更します。

$DebugPreferenceシェル変数に"Stop"を設定
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シェル変数の設定を変更します。

$DebugReferenceシェル変数に"Inqure"を設定
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変数を使用することで、デバッグメッセージの出力の振る舞いを制御することが可能です。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • HIRO(ヒロ)

    HIRO's.NETのHIROです。 とある半導体工場のSEです。 VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。 最近はBlog でPowerShellについて書いています。 2008/07/07にPowerShell from Japan!!という...

バックナンバー

連載:Windows PowerShell 入門

もっと読む

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5