PowerShellの Write-Host と Write-Output の違いは何ですか?
好む...
Write-Host "Hello World ";
Write-Output "Hello World";
一言で言えば、Write-Host
はコンソール自体に書き込みます。 VBScript の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に変数に割り当てるかパイプを別のコマンドにパイプすることでパイプラインへの出力の処理を指示しない場合、out-defaultに送信されます。これは通常コンソールであるため、最終結果は同じになります。
Write-Output
は、パイプラインを介してデータをオブジェクトとして送信します。質問の例では、単に文字列を渡します。
write-Host
はホストに依存します。コンソールでwrite-Host
は基本的に[console]::WriteLine
。詳細については this を参照してください。
Write-HostとWrite-Outputの別の違い:
Write-Hostはメッセージを画面に表示しますが、ログには書き込みません
Write-Outputはメッセージをログに書き込みますが、画面には表示しません。
また、Write-Hostは有害と見なされます。詳細な説明は、書き込みホストが有害と見なされますで確認できます。