PowerShellのWrite-HostとWrite-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
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に何をすべきかを指示しない場合、出力はデフォルトでコンソールに送られるため、最終結果は同じように表示されます。
Write-Output`はパイプラインを通してデータをオブジェクトとして送ります。質問の例では、単に文字列を渡します。
write-hostはホスト依存です。コンソールでは、
write-hostは本質的に
[console]::WriteLine` を行うことになります。
詳しくは this を参照してください。