LoginSignup
14
15

More than 3 years have passed since last update.

PowerShellのデバッグ処理のすすめ(Write-Verbose)

Last updated at Posted at 2019-06-27

はじめに

PowerShellを用いて何かを開発する際に、(特にFunctionやMethodを作っているときに)デバッグに困ることが多く、無知故にWrite-Hostを用いてデバッグを行っていました。

環境

Windows 10
PowerShell 5.1

おすすめの方法

Write-Verboseコマンドレットを使用することを、おすすめします!
PowerShellプロの方にとっては、もう当たり前のことだと思います。
私は、PowerShellが出始めたころから使い続けていますが、このコマンドレットはもっと早く使うべきだったと後悔しています。

なぜおすすめなのか

  • 標準出力に出力されない(すごく大事!)
  • On/Offの制御が簡単にできる

Write-Verboseの使い方

書き方

こんな風に書くだけで簡単に使えます。

Write-Verbose "あんな処理をしているよ"

このスクリプトを実行しても何も出力されません。
これは、初期値でWrite-Verboseコマンドレットでの出力がOffに設定されているからです。

Write-VerboseをOnにする方法

では、Onにしてみましょう。
スクリプトを実行する前に以下のコマンドを実行します。

$VerbosePreference = 'Continue'

この状態でWrite-Verboseコマンドレットを使用すると、メッセージが表示されるようになります!

VERBOSE: あんな処理をしているよ

Write-VerboseをOffにする方法

Offにする方法も記載しておきます。

$VerbosePreference = 'SilentlyContinue'

Write-Verboseを使えば幸せになれた

以下の理由から、私は幸せになれると思いました。

  • PowerShellでFunctionを作る場合、Function内で標準出力に出力すると、戻り値に含まれてしまいます。
    このため、Write-Hostを多用していたのですが、そんな自分にサヨナラできます。
  • Write-Hostよりも、Write-Verboseのほうが詳細を出力しているんだということを明示的に伝えられます。
  • 自由にOn/Offを切り替えることができるので、Functionを呼ぶ側の方が自由に取捨選択できていいと思います。

最後に

Write-Verboseのほかに、Write-Debugというものもあり、ほぼ同様の機能を提供しています。

完全に自分向けのメッセージを出力する場合、Write-Debugでいいような気がしますが、誰かがFunction中の進捗を知りたいときの出力には、Write-Verboseのほうが適していると考えます。

Write-DebugWrite-Verboseを使い分けて、より使用者にやさしいPowerShellスクリプトを作れるように精進したいものです。

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15