関数のなかでうっかり、Write-Outputを使ってしまい、意図しない動作ではまってしまいました。関数(functionの中でWrite-Outputを使うとreturn値として扱われるのです)
1. Write-Host
Write-Host
は、コンソール(ホスト)に直接メッセージを表示するためのコマンドレットです。この出力は 標準出力ストリームには流れず、画面表示のみを目的とします。
特徴
- 出力は画面表示専用で、後続のコマンドには渡されません。
- 主にユーザー向けのメッセージ表示に使います。
- カラフルな出力を行うオプション(
-ForegroundColor
や-BackgroundColor
)があります。
2. Write-Output
Write-Output
は、標準出力ストリームにデータを送信します。パイプラインで他のコマンドに渡すためのデータを生成します。
特徴
- 出力はパイプラインに流れるので、後続のコマンドで処理できます。
- ユーザー表示だけでなく、スクリプトやコマンド間でのデータ受け渡しに使用します。
違いの比較表
機能 | Write-Host | Write-Output |
---|---|---|
出力先 | コンソール(ホスト) | 標準出力ストリーム(パイプライン) |
パイプラインでの利用 | ×(使用不可) | ○(使用可能) |
主な用途 | ユーザー向けメッセージの表示 | スクリプト間のデータ渡し、標準出力の利用 |
カスタマイズ(色指定など) | 可能(-ForegroundColor 等) | 不可能 |
使用タイミング | メッセージを強調して画面表示したい場合 | データ処理やパイプラインで使う場合 |
使い分けの基準
Write-Host
を使う場合- メッセージの強調や装飾付きのログをコンソールに出力したいとき。
- パイプラインやスクリプト内で処理する必要がないユーザー向けの単純な通知を表示したいとき。
Write-Output
を使う場合- スクリプトやコマンドで生成したデータをパイプラインや後続処理に渡したいとき。
- 通常のデータ出力として利用したいとき。