1 2 3 →

はじめに

 この連載では、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変数を使用することで、デバッグメッセージの出力の振る舞いを制御することが可能です。


1 2 3
→
INDEX
Windows PowerShell 入門(10)-デバッグ編
Page1
はじめに
対象読者
必要環境
デバッグメッセージの出力
Set-PSDebugコマンドレットによるデバッグ
ブレークポイントを使用する
まとめ
プロフィール
HIRO ヒロ

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

2008/07/07にPowerShell from Japan!!というサイトを立ち上げました。PowerShellユーザーが集まってブログを書いています。よろしかったら来てください。

HIRO's.NET Blog
HIRO's.NET - VB.NET, C#, PowerShell Tips -
PowerShell from Japan!!
PowerShell from Japan!! Wiki


注目の求人情報
コンサルタント/少数精鋭のWeb戦略コンサルティングファーム
ユーザビリティーコンサルタント: 論理的な観点からサイトや製品のコンセプト設計~詳細な画面・製品...
コンサルタント/ITソリューション
ERPコンサルティングサービス (ERPアプリケーション導入に伴うコンサルティングおよび開発支援) 〇...
コンサルタント/コンサルティング企業
エクセレントカンパニーを対象とした、経営戦略の立案から実行までの支援を行います。...

(最新日付順)
名前(ゲストの方もコメントをどうぞ):*
アイコン:
なし

内容(テキストのみ1200文字まで):*

投稿規定に同意して

スポンサーサイト

この記事のトラックバックURL: