web-dev-qa-db-ja.com

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

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

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

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

ただし、メモ帳でログファイルを開くと、すべてが1行で表示されます。テキストファイルに新しい行を挿入する方法はありますか?

31
NewPowerSheller

`nは改行文字です。メモ帳( Windows 10より前 )は、改行が`r`n(キャリッジリターン+ラインフィード、CR-LF)としてエンコードされることを想定しています。便利なエディターでファイルを開きます( SciTENotepad ++ltraEdit-32Vim 、...)改行をCR-LFに変換します。または、PowerShellを使用します。

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

環境クラスの静的なNewLineプロパティ を使用して、適切な改行を取得できます。

$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
19
Aaron Jensen

改行と復帰を変数に割り当ててから、PowerShellスクリプト内のテキストに追加することもできます。

$OFS = "`r`n"
$msg = "This is First Line" + $OFS + "This is Second Line" + $OFS
Write-Host $msg
14
rchacko

これを試して;

Add-Content -path $logpath @"
$((get-date).tostring()) Error $keyPath $value
key $key expected: $policyValue
local value is:  $localValue
"@
3
Steztric