2013-07-02 5 views
21

Sto creando un file di registro degli errori. Questo è il mio codice corrente:Scrittura di nuove righe in un file di testo in PowerShell

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

Quando ho Get-Content sul file di log, visualizza in modo corretto, con la nuova linea prima di "valore in loco".

Tuttavia, quando apro il file di registro in Blocco note, visualizza tutto su una singola riga. Come posso farlo inserire anche una nuova riga nel file di testo?

risposta

31

`n è un carattere di avanzamento riga. Blocco note si aspetta che le interruzioni di riga siano codificate come `r`n (ritorno a capo + avanzamento riga, CR-LF). Aprire il file in un editor utile (SciTE, Notepad++, UltraEdit-32, Vim, ...) e convertire le interruzioni di riga in CR-LF. Oppure utilizzare PowerShell:

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

Se ho modificato il codice per includere il ritorno carraige prima del linefeed, il blocco note potrebbe mostrare il file correttamente? – NewPowerSheller

+0

Se si crea nuovamente il file: sì, dovrebbe mostrare correttamente un file appena creato. –

+0

Sto usando PowerShell v4 ('$ PSVersionTable.PSVersion') e uso entrambi' '' r'n crea due righe vuote quando si usa 'r'n' | Out-File -Encode Ascii' così sono passato solo a '' 'r' che crea correttamente uno spazio a linea singola. – user4317867

14

È possibile utilizzare il Environment class's static NewLine property per ottenere il giusto ritorno a capo:

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

E 'anche possibile assegnare a capo e il trasporto di ritorno alle variabili e poi li aggiunge ai testi all'interno di script PowerShell:

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

Prova questo;

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