Запись новых строк в текстовый файл в PowerShell

Я создаю файл журнала ошибок. Это мой текущий код:

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

Когда я Get-Content в файле журнала, он отображается правильно, с новой строкой перед «локальным значением».

Однако, когда я открываю файл журнала в Блокноте, он отображает все в одной строке. Как я могу заставить его вставить новую строку в текстовый файл?


person NewPowerSheller    schedule 02.07.2013    source источник


Ответы (5)


`n — символ перевода строки. Блокнот (до 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
person Ansgar Wiechers    schedule 02.07.2013
comment
Если я изменил код, чтобы включить возврат каретки перед переводом строки, блокнот правильно отобразит файл? - person NewPowerSheller; 02.07.2013
comment
Если вы создадите файл заново: да, тогда он должен правильно отображать вновь созданный файл. - person Ansgar Wiechers; 02.07.2013
comment
Я использую PowerShell v4 ($PSVersionTable.PSVersion) и использую Both r`n creates two blank lines when using `r`n` | Out-File -Encode Ascii` so I switched to only r`, который правильно создает однострочное пространство. - person user4317867; 13.06.2016
comment
Спасибо за ответ. Делает работу хорошо. Ваше здоровье. - person Anjana Silva; 31.10.2019

Вы можете использовать статическое свойство NewLine класса Environment, чтобы получить правильную новую строку:

$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
person Aaron Jensen    schedule 02.07.2013
comment
это то, что я в итоге использовал - person Master Azazel; 22.11.2018

Также можно назначить переменным новую строку и возврат каретки, а затем добавить их к текстам внутри скриптов PowerShell:

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

Попробуй это;

Add-Content -path $logpath @"
$((get-date).tostring()) Error $keyPath $value
key $key expected: $policyValue
local value is:  $localValue
"@
person Steztric    schedule 26.07.2017
comment
Символ @ изменяет способ чтения текста внутри . Со знаком @ текст читается «как есть». Это означает, что текст не обрабатывается дополнительно, а также включаются символы новой строки. - person TinyRacoon; 29.01.2019

У меня не работали значения при использовании команды Pipe. Я создал дополнительный Add-Content с -Value ничего, за которым следует исходный Get | Добавьте то, что я пытался использовать.

$newfile = "C:\FilePath\Newfile.txt" 
$oldfile = "C:\FilePath\Oldfile.txt"

Add-Content -Path "$newfile" -value ""
Get-Content -Path "$oldfile | Add-Content -Path "$newfile"
person Heph    schedule 03.04.2021