#はじめに
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-Debug
とWrite-Verbose
を使い分けて、より使用者にやさしいPowerShellスクリプトを作れるように精進したいものです。