PowerShellでテキストファイルに新しい行を書き込む

エラーログファイルを作成しています。これが私の現在のコードです。

Add-Content -path $logpath $((get-date).tostring() + " Error " + $keyPath `
   + $value + " key " + $key +" expected: " + $policyValue `
   + "`n local value is: " +$localValue

このログファイルを Get-Content すると、正しく表示され、 "local value.&quot の前に新しい行が追加されています。

しかし、メモ帳でログファイルを開くと、すべてが1行で表示されてしまいます。テキストファイルにも改行を入れるにはどうしたらいいのでしょうか?

ソリューション

改行文字のことです。Notepad(Windows 10以前)では、改行文字は `n(キャリッジリターン+ラインフィード、CR-LF)としてエンコードされることが期待されています。ファイルを便利なエディタ(SciTE、[Notepad++][3]、[UltraEdit-32][4]、Vimなど)で開き、改行コードをCR-LFに変換します。あるいはPowerShellを使う。

(Get-Content $logpath | Out-String) -replace "`n", "`r`n" | Out-File $logpath

[3]: https://notepad-plus-plus.org/ [4]: https://www.ultraedit.com/

解説 (4)

Environmentクラス'のstatic NewLineプロパティ](http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx)を使えば、適切な改行を得ることができます

$errorMsg =  "{0} Error {1}{2} key {3} expected: {4}{5} local value is: {6}" -f `
               (Get-Date),$keyPath,$value,$key,$policyValue,([Environment]::NewLine),$localValue
Add-Content -Path $logpath $errorMsg
解説 (1)

また、PowerShellスクリプトの中で、変数に改行やキャリッジリターンを割り当てて、テキストに付加することも可能です。

$OFS = "`r`n"
$msg = "This is First Line" + $OFS + "This is Second Line" + $OFS
Write-Host $msg
解説 (0)