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

PowerShellのWrite-HostWrite-Outputの違いは何ですか?

例えば...

Write-Host "Hello World ";

Write-Output "Hello World";
ソリューション

一言で言えば、Write-Hostはコンソールそのものに書き込むのです。VBScript]1 でいうところの MsgBox のようなものだと考えてください。一方、 Write-Output はパイプラインに書き込みますので、次のコマンドはそれを入力として受け取ることができます。オブジェクトを書き込むために Write-Output を使用する必要はありません。なぜなら、 Write-Output は暗黙のうちに呼び出されるからです。

PS> Get-Service

と同じになる。

PS> Get-Service | Write-Output
解説 (2)

Write-Outputは出力をパイプラインに送ります。そこから別のコマンドレットにパイプしたり、変数に代入したりすることができます。 Write-Host は、出力を直接コンソールに送ります。

$a = 'Testing Write-OutPut'  | Write-Output
$b = 'Testing Write-Host' | Write-Host

Get-Variable a,b

出力します。

Testing Write-Host

Name                           Value                                                                 
----                           -----                                                                 
a                              Testing Write-OutPut                                                  
b                                                  

パイプラインの出力を変数に代入したり、別のコマンドにパイプしたりすることで、Powershellに何をすべきかを指示しない場合、出力はデフォルトでコンソールに送られるため、最終結果は同じように表示されます。

解説 (0)

Write-Output`はパイプラインを通してデータをオブジェクトとして送ります。質問の例では、単に文字列を渡します。

write-hostはホスト依存です。コンソールでは、write-hostは本質的に[console]::WriteLine` を行うことになります。 詳しくは this を参照してください。

解説 (2)