Write-Host と Write-Output ではリダイレクトした時の改行コードが変わってしまう

(※ 2017.09.15追記: stknohg さんから、いろいろ技術的な補足をいただきました。詳しくはコメント欄を参照ください)

  • Write-Host の出力を、PowerShell の呼び出し元でリダイレクトすると、改行コードが LF になる。
  • CRLF にするには Write-Output を使わねばならない

host.ps1:

Write-Host "A"
Write-Host "B"
$ host.ps1 > host.txt
$ dumphead.exe host.txt
41 0A 42 0A

(※ 9/15 追記。NYAGOS から実行したので省略していますが、これ頭に powershell -ExecutionPolicy RemoteSigned -file が入っています)

output.ps1:

Write-Output "A"
Write-Output "B"
$ output.ps1 > output.txt
$ dumphead.exe output.txt
41 0D 0A 42 0D 0A

(※ 9/15 追記。同じく頭に powershell -ExecutionPolicy RemoteSigned -file が入っています)

最初、vim とかで見てたので気づきませんでしたが、 プログラムを提出後、メモ帳で見たら Write-Host で出したプログラムの改行が消えて見えたので、 慌ててしまいました。


Write-HostとWrite-Outputの違い - しばたテックブログ を読みました。本来は:

  • Write-Host はコンソールに出力するコマンド
  • Write-Output は標準出力に出力するコマンド

で、その辺の違いが出力に現れているのかもしれませんね(おざなり)

以上