web-dev-qa-db-ja.com

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

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

好む...

Write-Host "Hello World ";

Write-Output "Hello World";
66
daniyalahmad

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

PS> Get-Service

次と同じです:

PS> Get-Service | Write-Output
55
Shay Levy

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に送信されます。これは通常コンソールであるため、最終結果は同じになります。

20
mjolinor

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

write-Hostはホストに依存します。コンソールでwrite-Hostは基本的に[console]::WriteLine。詳細については this を参照してください。

7
Chad Carisch

Write-HostとWrite-Outputの別の違い:

  • Write-Hostはメッセージを画面に表示しますが、ログには書き込みません

  • Write-Outputはメッセージをログに書き込みますが、画面には表示しません。

また、Write-Hostは有害と見なされます。詳細な説明は、書き込みホストが有害と見なされますで確認できます。

5
Summer