PowerShellのWrite-HostとWrite-Outputの違いは何ですか?
お気に入り...
Write-Host "Hello World ";
Write-Output "Hello World";
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に出力を処理するように指示しない場合、出力はデフォルト外に送信されます。通常はコンソールであるため、最終結果は同じように表示されます。 。
Write-HostとWrite-Outputのもう1つの違い:
Write-Hostは画面にメッセージを表示しますが、ログには書き込みません
Write-Outputはメッセージをログに書き込みますが、画面には表示されません。
そして、Write-Hostは有害であると見なされます。詳細な説明は、「有害と見なされる書き込みホスト」にあります。
Write-Output
スクリプトを自分で実行している場合は、画面にメッセージが表示されると思います。そのため、「Write-Outputはメッセージをログに書き込みますが、画面には表示されません」という意味がわかりません。?
以下の例で、2つのコマンドの違いを理解できます。
書き込みホスト "msgtxt" | Get-Service上記を実行すると、「msgtxt」として出力されます。
書き込み出力 "msgtxt" | Get-Service上記を実行すると、msgtxtはサービスの名前ではないため、エラーが発生します。(理想的な状態)(パイプラインに書き込んでいて、Get-Serviceへの入力として渡されているため)