Windows PowerShell での Write-Host と Write-Output の違いについて出力先の観点から違いを考えます。同時に Out-Host や引数だけを指定した出力についても考えてます。
ファンクションで、受けとった引数の内容を 4 種類の方法で出力
1. 次のファンクションを作成します。
function test ($x) { Write-Host "Write-Host: $x" Out-Host -InputObject "Out-Host: $x" Write-Output "Write-Output: $x" "No Command: $x" }
2. ファンクションをコールします。
$a = test "ABC"
3. ファンクションの戻り値を表示させます。
$a
この結果、次のことが分かります。
通常、コマンドウィンドウで Write-Host と Write-Output を実行すると、両方とも結果はホストに出力されるので、両社の区別がつきにくいのですが、ファンクション内で実行すると違いが出てきます。
Write-Host, Out-Host コマンドレットで出力をすると、必ずホストに書きこまれます。ファンクション内で実行してもホストに書きこまれます。従って、デバッグ目的の使われ方が考えられます。
これとは違って、Write-Output と引数だけを指定した出力はファンクションの戻り値に結果が出力されています。 これらは結果を出力するという意味のようで、どこに出力するかは状況によって変わってきます。ファンクション内で実行すれば、ファンクションの戻り値となります。コマンドウィンドウで直接実行すれば、出力はホストしかありませんので、ホストになります。
Write-Host と Write-Output の違い
1. 次のコマンドを実行すると、文字列がホストに出力されます。戻り値はなく $a は $null です。
$a = Write-Host "ABCDE"
2. 次のコマンドを実行すると、文字列は出力されません。代わりに戻り値として $a に入っています。
$a = Write-Output "ABCDE"