在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之前有新的一行;

然而,当我在记事本中打开日志文件时,它把所有内容都显示在一行上。我怎样才能使它在文本文件中也插入一个新行呢?

解决办法

`n 是一个换行字符。Notepad(Windows 10之前)希望断行符被编码为`r`n (回车+换行,CR-LF)。在一些有用的编辑器(SciTE, Notepad++, UltraEdit-32, Vim, ...)中打开文件,将换行符转换成CR-LF。或者使用PowerShell:

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

你可以使用Environment class's static NewLine property来获得适当的换行:

$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)