NewPowerSheller
NewPowerSheller

Reputation: 553

Writing new lines to a text file in PowerShell

I'm creating an error log file. This is my current code:

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

When I Get-Content on the log file, it displays correctly, with the new line before "local value."

However, when I open the log file in Notepad, it displays everything on a single line. How can I cause it to insert a new line into the text file as well?

Upvotes: 54

Views: 272105

Answers (6)

Hemendr
Hemendr

Reputation: 1048

"Line-1$([Environment]::NewLine)`"Line-2`"$([Environment]::NewLine)Line-3"| out-File c:\Temp\abc.txt 

enter image description here

enter image description here

Upvotes: 0

Heph
Heph

Reputation: 31

Values were not working for me when using Pipe command. I Created an additional Add-Content with -Value of nothing "" followed by the original Get | Add that I was trying to use.

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

Add-Content -Path "$newfile" -value ""
Get-Content -Path "$oldfile | Add-Content -Path "$newfile"

Upvotes: 3

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200293

`n is a line feed character. Notepad (prior to Windows 10) expects linebreaks to be encoded as `r`n (carriage return + line feed, CR-LF). Open the file in some useful editor (SciTE, Notepad++, UltraEdit-32, Vim, ...) and convert the linebreaks to CR-LF. Or use PowerShell:

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

Upvotes: 72

Steztric
Steztric

Reputation: 2942

Try this;

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

Upvotes: 4

rchacko
rchacko

Reputation: 2119

It's also possible to assign newline and carriage return to variables and then append them to texts inside PowerShell scripts:

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

Upvotes: 19

Aaron Jensen
Aaron Jensen

Reputation: 26749

You can use the Environment class's static NewLine property to get the proper 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

Upvotes: 21

Related Questions