ウェブサイト検索

PowerShellスクリプトのデバッグ方法


スクリプトの開発には通常、トラブルシューティングが必要であり、それは通常、2つのアプローチのいずれかにつながります。手動で変数を値に設定し、スクリプトを実行時にそのデータを出力するか、デバッグ機能を利用してブレークポイントを設定し、続行または中止する前にデータを検査するかです。PowerShell ISEおよびVisual Studio Codeには、デバッグを実行する機能が組み込まれています。

PowerShellのデバッグはどのように機能しますか?

Windows PowerShellに含まれているPowerShell ISEは、PowerShellスクリプトをデバッグするための伝統的な環境です。デバッグ用のメニューとブレークポイントのグラフィカルな表現が組み込まれているため、始めるのが簡単です。まず、デバッグするスクリプトは保存する必要があります。次に、3つの方法のいずれかを使用してブレークポイントを設定する必要があります。

  • フォーカスされた行でF9キーを使ってブレークポイントを設定します。
  • 行の横で右クリックし、トグルブレークポイントを選択してブレークポイントを設定します。
  • 使用してください

    Set-PSBreakPoint
  • 行、変数、関数、または一致したテキストを指定すること。

ブレークポイントを設定したら、F5キーを押すか、デバッグ → 実行/続行を選択するだけでデバッグを開始できます。スクリプトが指定されたブレークポイントに達すると、実行が一時停止し、次のいずれかのアクションを取る必要があります。

  • ステップオーバー - 現在のステートメントのみを実行し、次のステートメントの前で停止します。現在のステートメントが関数またはスクリプトである場合は、停止する前に全体を実行します。
  • ステップイン - ステップオーバーに似ており、次のステートメントの前で停止し、現在のステートメントのみを実行します。関数やスクリプト全体を実行するのではなく、呼び出された場合はその呼び出しにステップインします。
  • ステップアウト - 関数内にいる場合は、関数がネストされている場合は、1段階上にステップアウトします。メインスクリプトにいる場合は、スクリプトの最後まで、または次のブレークポイントまで(早い方)実行します。スキップされたステートメントは実行されますが、ステップ実行はされません。

スクリプトがブレークポイントで停止しているとき、マウスカーソルを変数の上に置くと、任意の変数の値を確認できます。さらに、コマンドラインを使用して変数を出力し、現在の状態を確認することもできます。ただし、いくつかの注意点があります。

$_

,

$Input

,

$MyInvocation

,

$PSBoundParameters

、そして

$Args

自動変数でありデバッグの対象ではないため、機能しません。これらの値を取得する一つの方法は、中間変数に割り当て、それをブレークポイントとして設定できるようにすることです。

Visual Studio CodeでのPowerShellデバッグ

PowerShell ISEの動作に非常に似て、Visual Studio Codeは非常に便利なデバッグオプションを追加しています。さらに、VS CodeはPowerShell 7.xで簡単にデバッグできるのに対し、ISEは伝統的にWindows PowerShellに限定されています。PowerShell ISEと同じキーボードコマンドを使用することで、迅速にデバッグを始めることができます。さらに良いことに、VS Code内にデバッグペインがあり、変数出力の多くを統合して、コード内のすべての変数値のスナップショットを見ることがより簡単になります。

VS Codeのデバッグを使用する

PowerShell ISEと同様に、F5を使用してインタラクティブなデバッグセッションを開始できます。ISEとは異なり、VS Codeははるかに優れた便利なデバッグ体験を提供します。従来のデバッグコンソールが得られるだけでなく、

[DBG]

プロンプトですが、左側のデバッグペインにはすべての既知の変数とその出力があります。デバッグオプションをより使いやすくするために、上部のデバッグバーはブレークポイントに対して簡単にステップイン、アウト、オーバーすることができます。また、実行前に保存する必要もありません!

この操作を簡単に行うには、VS Code の PowerShell 拡張が必要です。

コマンドデバッグコマンドの使用

コマンドラインから厳密にデバッグすることは時々簡単な操作ではありませんが、組み込みのデバッグコマンドを使用することでこれを行うことができます。これを簡単にするためのいくつかの組み込みコマンドがあります。

  • <a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/set-psbreakpoint?view=powershell-7.1">Set-PSBreakPoint</a>
  • 特定の行、コマンド、または変数でトリガーされるブレークポイントを設定します。

  • <a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-psbreakpoint?view=powershell-7.1">Get-PSBreakPoint</a>
  • ・特定のブレークポイントをIDで取得するか、すべてのブレークポイントをリストします。

  • <a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/remove-psbreakpoint?view=powershell-7.1">Remove-PSBreakPoint</a>
  • 特定のブレークポイントを削除します。

  • <a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/disable-psbreakpoint?view=powershell-7.1">Disable-PSBreakPoint</a>
  • - 一時的にブレークポイントを無効にしますが、削除はしません。

  • <a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/enable-psbreakpoint?view=powershell-7.1">Enable-PSBreakPoint</a>
  •  - 以前無効にしたブレークポイントを有効にします。

多用途を使用して

Set-PSBreakPoint

, 一度ヒットしたらデバッグコマンドプロンプトに入るブレークポイントをすぐに設定できます。その時点で、標準のキーコンビネーションを使用して変数を素早く検査し、その時点で実行を続けたり中断したりすることができます。

結論

デバッグは難しくある必要はなく、上記のいずれかの方法を使って始めると、スクリプト開発に不可欠なものになることに気づくでしょう。今日、PowerShellデバッグを始める方法をチェックしてみてください!

関連記事: