Write-Host と Write-Output の違い - PowerShell

PowerShellの出力コマンド"Write-Output"と"Write-Host"の違いを紹介します。

Write-Host

出力をホストに書き込みます。書き込む内容をカスタマイズすることができます。
出力のカスタマイズが可能なため、ForegroundColorパラメータを利用するとテキストの表示色を指定できます。また、BackgroundColorパラメータを利用すると背景色も指定できます。
Separatorパラメーターを利用すると指定した文字列でオブジェクトを区切り出力することもできます。

Write-Output

オブジェクトをコンソールに表示します。
Write-Outputコマンドの後ろにパイプのコマンドが記述されている場合は、Write-Outputの出力がパイプで次のコマンドに渡されます。

文字色の指定 (Write-Host)

Write-HostはForegroundColorパラメータを利用して文字色を指定できます。

書式

Write-Host [出力文字列] -ForegroundColor [カラーコード]
カラーコードはこちらの記事を参照してください。

コード例1

下記のコード(.ps1ファイル)(を記述します。
Write-Host "ペンギン" -ForegroundColor red

ps1ファイルを実行すると下図の画面が表示されます。文字が赤色で表示されることが確認できます。

コード例2

カラーコードは色名、数値のどちらでも指定できます。
Write-Host "らくだ" -ForegroundColor 6

ps1ファイルを実行すると下図の画面が表示されます。文字が黄土色で表示されることが確認できます。

背景色の指定 (Write-Host)

Write-HostはBackgroundColorパラメータを利用して文字色を指定できます。

書式

Write-Host [出力文字列] -BackgroundColor [カラーコード]
カラーコードはこちらの記事を参照してください。

コード例1

下記のコード(.ps1ファイル)を記述します。
Write-Host "ねずみ" -ForegroundColor 6

ps1ファイルを実行すると下図の画面が表示されます。背景色が灰色で表示されることが確認できます。

コード例2

下記のコード(.ps1ファイル)を記述します。
Write-Host "Penguin Jump!" -ForegroundColor Black -BackgroundColor Cyan

ps1ファイルを実行すると下図の画面が表示されます。背景色がシアンになり、文字が黒で表示されることが確認できます。

配列の出力

コード : Write-Host

下記のコード(.ps1ファイル)を記述します。
Write-Host @(2,4,6,8,10,12)

上記のps1ファイルを実行します。下図の実行結果が表示されます。個々の要素は改行されません。

コード : Write-Output

下記のコード(.ps1ファイル)を記述します。
Write-Output @(2,4,6,8,10,12)

上記のps1ファイルを実行します。下図の実行結果が表示されます。個々の要素は改行されて表示されます。

配列の出力 : Separatorオプションの利用

Write-Hostコマンドは、Separator オプションを利用すると要素の間の区切り文字を指定できます。

コード

Write-Host @(100,200,300,400,500) -Separator "::"
上記のps1ファイルを実行します。下図の実行結果が表示されます。個々の要素がSeparatorオプションで指定した"::"の文字列で区切られて表示されます。

パイプの利用

コード : Write-Host

下記のコード(.ps1ファイル)を記述します。
Write-Host @(2,4,6,8,10,12) | Select-String 2

上記のps1ファイルを実行します。Write-Hostコマンドはコンソールに出力するコマンドのため、Select-Stringコマンドには出力内容は渡されないため、Write-Hostに与えたオブジェクトがそのまま表示されます。

コード : Write-Output

下記のコード(.ps1ファイル)を記述します。
Write-Output @(2,4,6,8,10,12) | Select-String 2

上記のps1ファイルを実行します。パイプで後ろのコマンドがあるため、Write-Outputの出力はパイプで Select-String コマンドの入力として渡されます。Select-String では "2" が与えられているため、Weite-Outputから渡された値で "2"を含む値が抜き出されます。
2 12 が2を含んでいるため、この2つの値がコンソールに出力されます。

連想配列を出力する場合

連想配列を出力する場合、Write-Hostでは連想配列のクラス名が表示されます。Write-Outputでは連想配列のキーと値の一覧が表示されます。

コード例

$value = @{penguin = "ペンギン"; camel = "ラクダ"; whale = "くじら"}

Write-Host "---------"

Write-Host $value 

Write-Host "---------"

Write-Output $value 

Write-Host "---------"

実行結果


著者
iPentecの企画・分析担当。口が悪いのでなるべく寡黙でありたいと思っている。が、ついついしゃべってしまい、毎回墓穴を掘っている。
iPentec all rights reserverd.