適材適所

PowerShellやVBAなどプログラミング系の話多めで

【PowerShell】Write-Verboseでスクリプトや関数の詳細を表示する【Write-Verbose】

PowerShellのスクリプトや関数で処理の経過やデバッグ情報を表示するのに皆さんはどうしていますか?

Write-Hostでコンソールに書き出している人もいるかも知れません。

それも一つの手段ではありますが、場合によってはデバッグ情報を表示したくないときにも問答無用でコンソール上に表示されてしまいます。

PowerShellにはそんな問題をスマートに解決してくれる便利なコマンドレット、Write-Verboseコマンドレットがあります。

Write-VerboseコマンドレットはVerboseの単語が示す通り、詳細を表示するためのコマンドレットです。

この記事ではデバックや経過表示に最適なWrite-Verboseコマンドレットについて紹介したいと思います。

Write-Verboseコマンドレット

まずは、挙動を見てみましょう。

$VerbosePreference変数の値によって挙動が変わってきます。

デフォルト値である$VerbosePreference="SilentlyContinue"の前提で話を進めます。

 
$VerbosePreference

と入力することで現在の値を確認することができます。

[出力結果]

SilentlyContinue

この状態でWrite-Verboseコマンドレットを実行してみます。

 
Write-Verbose -Message "これは詳細メッセージです。"

結果は何も表示されません。

次に-Verboseオプションを設定して実行してみると

 
Write-Verbose -Message "これは詳細メッセージです。" -Verbose

[出力結果]

詳細: これは詳細メッセージです。

先ほどは表示されなかった詳細メッセージが表示されました。

-Verboseオプションを付与することで詳細メッセージが表示されるようになります。

Write-Verboseを単体で使用するとあまり意味がありません。

基本的には、スクリプトや関数の中で使用することが多いと思います。

関数で使用する

関数で使用する場合の例です。

 
function Test{
   [Cmdletbinding()]
   param()
   begin{Write-Verbose "[$(get-date)] 処理開始"}
   process{Write-Verbose "[$(get-date)] 処理中"}
   end{Write-Verbose "[$(get-date)] 処理終了"}
}

-Verboseオプションを付与して、この関数を実行することで

詳細メッセージが表示されました。

f:id:shinmai_papa:20210825103233p:plain

これを利用することで、-Verboseオプションを使って

処理の経過を表示したり、デバッグ情報を表示することができるようになります。

もちろん関数だけでなくスクリプトでも使用可能です。

ちなみに [Cmdletbinding()]属性を付与することで関数をコマンドレットと同じように扱うことができるようになり、

PowerShellのデフォルトのオプションが使えるようになります。

$VerbosePreference

$VerbosePreferenceの値を変えることで

詳細情報の表示をデフォルトにすることもできます。

 
$VerbosePreference=2

もしくは

 
$VerbosePreference="Continue"

とすることで詳細情報が表示されるようになります。

$VerbosePreferenceが取ることのできる値については、

ActionPreference Enumのドキュメントを参照されるとよいと思います。

終わりに

Write-Verboseコマンドレットの使い方について紹介しました。

関数やスクリプトをよりユーザーフレンドリーにするためにも

ぜひ使いこなしたいコマンドレットですね。

ここまでお読みいただき、ありがとうございました。