Abhinav Anshuman
Abhinav Anshuman

Reputation: 33

Powershell Newline Character is not working I tried `n "`n" '`n'

**I tried n "n" '`n'

Blockquote

**

GC D:\code\ServerList.txt | % {
$Comp = $_
#write-output "server Information"
If (Test-Connection $Comp -Quiet){
$Luser = (Get-WmiObject -class win32_process -Filter 
"Name='Explorer.exe'" -ComputerName $Comp | % {$_.GetOwner().User} | 
Sort-Object -Unique) -join ","
$Mem = GWMI -Class win32_operatingsystem -computername $COMP
  New-Object PSObject -Property @{
            "ServerInfo" = ""
            Server = $Comp
            "CPU usage" = "$((GWMI -ComputerName $COMP win32_processor 
| Measure-Object -property LoadPercentage -Average).Average) %"
            "Memory usage" = "$("{0:N2}" -f 
((($Mem.TotalVisibleMemorySize - $Mem.FreePhysicalMemory)*100)/ 
$Mem.TotalVisibleMemorySize)) %"
            "Total FreeSpace" = "$("{0:N2}" -f ((Get-WmiObject -Class 
win32_logicaldisk -ComputerName $COMP -Filter "DriveType = '3'" |
              Measure-Object -property FreeSpace -Sum).Sum /1GB)) GB"
            "DiskSpace" = "$("{0:N2}" -f ((Get-WmiObject -Class 
win32_logicaldisk -ComputerName $COMP -Filter "DriveType = '3'" |
              Measure-Object -property Size -Sum).Sum /1GB)) GB"
        "Comment" =  ""
  "logged Users" = $Luser
  }
}
Else{
"" | Select @{N="Server";E={$Comp}},"CPU usage","Memory usage","Total 
FreeSpace","logged Users","DiskSpace"
}
}| Select "ServerInfo",Server,"logged Users","CPU usage","Memory 
usage","Total FreeSpace" ,"DiskSpace", "Comment" |
Export-Csv "D:\code\Diskncpu.csv" -nti –Append

output
enter image description here

desired output
enter image description here

Upvotes: 2

Views: 6632

Answers (4)

Jeroen Bloemscheer
Jeroen Bloemscheer

Reputation: 29

If I understand you correctly you want a row to appear with a newline character, but instead you get the `r`n litteral characters or anything you try to throw at it.

Minimal testcase I can come up with to reproduce this problem:

> function paste ($separator = '`r`n') {$($input) -join $separator}
> & { echo foo; echo bar; echo baz; } | paste
foo`r`nbar`r`nbaz

Expceted result was

foo
bar
baz

How do you get actual newlines as output instead of literal `r`n? Super simple, just use the suggested answer!

> function paste ($separator = "`r`n") {$($input) -join $separator}
> & { echo foo; echo bar; echo baz; } | paste
foo
bar
baz

Or, if you do not like magic strings:

function paste ($separator = [System.Environment]::NewLine) {$($input) -join $separator}
PS D:\Temp\specs\ProRail.TrackChanges.Specs.Features> & { echo foo; echo bar; echo baz; } | paste
foo
bar
baz

Upvotes: 0

Alex Sarafian
Alex Sarafian

Reputation: 674

Use [System.Environment]::NewLine to add new lines anywhere you need.

Having said that I formatted your code for clarity and executed against an array

@("MECDEVAPP01","MECDEVAPP01")| % {
    $Comp = $_
    #write-output "server Information"
    If (Test-Connection $Comp -Quiet){
        $Luser = (Get-WmiObject -class win32_process -Filter "Name='Explorer.exe'" -ComputerName $Comp | % {$_.GetOwner().User} | Sort-Object -Unique) -join ","
        $Mem = GWMI -Class win32_operatingsystem -computername $COMP
        New-Object PSObject -Property @{
            "ServerInfo" = ""
            Server = $Comp
            "CPU usage" = "$((GWMI -ComputerName $COMP win32_processor | Measure-Object -property LoadPercentage -Average).Average) %"
            "Memory usage" = "$("{0:N2}" -f ((($Mem.TotalVisibleMemorySize - $Mem.FreePhysicalMemory)*100)/ $Mem.TotalVisibleMemorySize)) %"
            "Total FreeSpace" = "$("{0:N2}" -f ((Get-WmiObject -Class win32_logicaldisk -ComputerName $COMP -Filter "DriveType = '3'" | Measure-Object -property FreeSpace -Sum).Sum /1GB)) GB"
            "DiskSpace" = "$("{0:N2}" -f ((Get-WmiObject -Class win32_logicaldisk -ComputerName $COMP -Filter "DriveType = '3'" | Measure-Object -property Size -Sum).Sum /1GB)) GB"
            "Comment" =  ""
        "logged Users" = $Luser
      }
    }
    Else{
        "" | Select @{N="Server";E={$Comp}},"CPU usage","Memory usage","Total FreeSpace","logged Users","DiskSpace"
    }
}| Select "ServerInfo",Server,"logged Users","CPU usage","Memory usage","Total FreeSpace" ,"DiskSpace", "Comment"|
Export-Csv "C:\Users\asarafian\Downloads\Diskncpu.csv" -nti –Append

The csv file is like this

"ServerInfo","Server","logged Users","CPU usage","Memory usage","Total FreeSpace","DiskSpace","Comment"
"","MECDEVAPP01","","7 %","70,24 %","203,97 GB","278,36 GB",""
"","MECDEVAPP01","","0 %","70,25 %","203,97 GB","278,36 GB",""

which is what I would expect from a conversion of a recordset (that's what you are building with all those pipes) into a csv.

I you want to product a formatted text then you cant use csv or you need to combine elements of it.

Upvotes: 1

James.Carlin
James.Carlin

Reputation: 45

"`r`n"

Needs to be in double quotes I believe.

Upvotes: 3

Jason Snell
Jason Snell

Reputation: 1465

Try using `r`n for a new line. It needs the new line and carriage return to work.

Upvotes: 0

Related Questions