PowerShellで「メッセージを表示したい」「確認のために値を出力したい」
―― そんなときに最初に使われるのが、Write-Host
コマンドです。
とても直感的でわかりやすい一方、使いすぎるとデバッグやログ出力で困るという落とし穴もあります。
この記事では、Write-Host
の基本から、他の出力方法との違い、正しい使い方や避けるべきシーンまでを初心者にもわかりやすく解説します。
Write-Hostとは?

Write-Host
は、PowerShellでコンソール(画面)に直接メッセージを表示するためのコマンドレットです。
その名前の通り、「ホスト(表示装置)に書き込む」という意味を持ちます。
最もシンプルな例:
Write-Host "こんにちは、PowerShell!"
実行すると、そのまま画面にテキストが表示されます:
こんにちは、PowerShell!
このコマンドレットは、単に画面に表示するだけでなく、テキストの色を変えたり、背景色を設定したりといった視覚的な調整も可能です。
基本的な使い方と書式

複数の値を表示:
$val = 123
Write-Host "値は:" $val
出力結果:
値は: 123
値を結合して表示:
$name = "PowerShell"
$version = 7
Write-Host "使用しているのは$name $versionです"
出力結果:
使用しているのはPowerShell 7です
改行せずに表示:
Write-Host "処理中..." -NoNewline
Start-Sleep -Seconds 2
Write-Host "完了!"
出力結果:
処理中...完了!
これは進捗状況やステータス表示などに便利です。
複数のオブジェクトを表示:
$process = Get-Process -Id $PID
Write-Host "現在のプロセス:" $process.Name "ID:" $process.Id
文字の色や背景色を変える方法

Write-Host
は、色付きの出力が可能なのも特徴です。
これにより、重要な情報を視覚的に目立たせることができます。
前景色(文字色)を指定:
Write-Host "成功しました!" -ForegroundColor Green
Write-Host "警告があります" -ForegroundColor Yellow
Write-Host "エラーが発生しました" -ForegroundColor Red
背景色も指定:
Write-Host "エラー発生!" -ForegroundColor White -BackgroundColor Red
Write-Host "成功" -ForegroundColor Black -BackgroundColor Green
指定できる色一覧:
- Black
- DarkBlue
- DarkGreen
- DarkCyan
- DarkRed
- DarkMagenta
- DarkYellow
- Gray
- DarkGray
- Blue
- Green
- Cyan
- Red
- Magenta
- Yellow
- White
実用的な例:ステータス表示
function Show-Status ($status) {
switch ($status) {
"Success" { Write-Host "[成功]" -ForegroundColor Green -NoNewline }
"Warning" { Write-Host "[警告]" -ForegroundColor Yellow -NoNewline }
"Error" { Write-Host "[エラー]" -ForegroundColor Red -NoNewline }
default { Write-Host "[$status]" -NoNewline }
}
Write-Host " " # スペースを入れて続けて表示
}
Show-Status "Success"
Write-Host "ファイルのコピーが完了しました"
Write-Hostと他の出力コマンドの違い
PowerShellには他にも出力方法があります。用途によって使い分けることが重要です。
コマンド | 用途 | 出力先 | パイプライン連携 |
---|---|---|---|
Write-Host | 画面に直接表示 | コンソールのみ | ×(何も返さない) |
Write-Output | 他のコマンドに値を渡す | パイプライン・画面 | ○(オブジェクトを返す) |
Write-Verbose | 詳細情報を出力(-Verbose時) | ログ的用途 | × |
Write-Error | エラーを出力 | エラーストリーム | × |
Write-Warning | 警告を出力 | 警告ストリーム | × |
Write-Debug | デバッグ情報(-Debug時) | デバッグ情報 | × |
重要な注意点:
Write-Host
は値を戻さないため、後続の処理には渡せません。
ログや処理フローの中ではWrite-Output
の方が適しています。
例えば、以下の2つのコードを比較してみましょう:
# Write-Hostの場合
$result = Write-Host "テスト"
$result # 何も表示されない(nullが格納される)
# Write-Outputの場合
$result = Write-Output "テスト"
$result # "テスト"と表示される
実際のパイプライン活用例:
# Write-Hostだとエラーになる例
Write-Host "test.txt" | Get-Content # エラー:パイプラインに何も渡されていない
# Write-Outputだと正常に動作
Write-Output "test.txt" | Get-Content # test.txtの内容が表示される
Write-Hostを使うべき場面・避けるべき場面

使うべき場面:
- ユーザーに明示的なメッセージを表示したいとき
Write-Host "処理を開始します..." -ForegroundColor Cyan
- テキストの色を使って強調表示したいとき
Write-Host "重要:" -ForegroundColor Red -NoNewline Write-Host "このファイルは削除されます!"
- 簡単なデバッグ確認(短期的な用途)
Write-Host "デバッグ: 変数の値=$value" -ForegroundColor Gray
- インタラクティブなスクリプトでのユーザーへのプロンプト
Write-Host "オプションを選択してください (1-3):" -ForegroundColor Yellow
避けるべき場面:
- ログに残したい情報の出力(
Write-Output
を使用)# 悪い例 Write-Host "ファイル処理完了: $file" # ログに残らない
# 良い例 Write-Output "ファイル処理完了: $file" | Tee-Object -Append -FilePath "log.txt"
- スクリプト内で後続処理と連携するデータ出力
# 悪い例 Write-Host $files | ForEach-Object { ... } # 何も処理されない
# 良い例 $files | ForEach-Object { ... }
- 反復処理の中で頻繁に使う(パフォーマンス低下の原因)
# 避けるべき 1..1000 | ForEach-Object { Write-Host $_ } # 遅くなる
# 良い方法 1..1000 # そのまま表示
よくある誤解と注意点

誤解・ミス | 解説 |
---|---|
Write-Host でログを記録できる | 画面に出るだけで記録には使えません。ログはファイル出力などで対応 |
パイプラインで値を渡せる | Write-Host は値を返さないので連携できません |
Write-Host $_ をループ内で使う | $_ はブロック内でのみ有効。表示はできますが、パイプラインが途切れる |
出力が常に見える | スクリプトが実行されるコンテキストによっては表示されないことも |
よくある間違いの例:
# 間違い:Write-Hostの結果を変数に格納しようとする
$files = Get-ChildItem | Write-Host # $filesは空になる
# 間違い:Write-Hostをパイプラインの中間で使う
Get-Process | Write-Host | Where-Object { $_.CPU -gt 100 } # 常に空の結果
# 正しい使い方:表示と処理を分離する
$processes = Get-Process
$processes | Where-Object { $_.CPU -gt 100 } # 処理
$processes | ForEach-Object { Write-Host $_.Name -ForegroundColor Cyan } # 表示
まとめ
PowerShellのWrite-Host
は、「見せる」ことに特化した出力コマンドです。
ユーザーへの通知や、視覚的に分かりやすい表示をしたい場面では非常に便利ですが、処理やデータのやり取りには不向きです。
おさらい:
Write-Host
は画面専用の出力手段- 色付き表示が可能で視覚的な強調ができる
- パイプラインやログには使わず、用途を限定しよう
Write-Output
やWrite-Verbose
との使い分けが重要
ベストプラクティス:
- スクリプトの主要な出力には
Write-Output
を使う - ユーザーへの通知のみ
Write-Host
を使う - デバッグ情報は
Write-Verbose
やWrite-Debug
を使う - エラーや警告は専用の
Write-Error
やWrite-Warning
を使う
「なぜか出力されない」「ログに残らない」といったトラブルの原因にもなりやすいので、役割を正しく理解して活用しましょう!
PowerShellを初めて学ぶ方は、まずWrite-Host
とWrite-Output
の違いを意識するところから始めると、スクリプトの質が格段に向上します。
それぞれの出力コマンドレットの特性を活かし、目的に合わせて適切に使い分けましょう。
コメント