web-dev-qa-db-fra.com

Écrire de nouvelles lignes dans un fichier texte dans PowerShell

Je crée un fichier journal des erreurs. Ceci est mon code actuel:

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

Quand je Get-Content sur le fichier journal, il s’affiche correctement avec la nouvelle ligne précédant "valeur locale".

Cependant, lorsque j'ouvre le fichier journal dans le Bloc-notes, tout est affiché sur une seule ligne. Comment puis-je lui faire insérer une nouvelle ligne dans le fichier texte?

31
NewPowerSheller

`n est un caractère de saut de ligne. Le Bloc-notes ( avant Windows 1 ) s'attend à ce que les retours à la ligne soient codés comme suit: `r`n (retour chariot + saut de ligne, CR-LF). Ouvrez le fichier dans un éditeur utile ( SciTE , Notepad ++ , ltraEdit-32 , Vim , ...) et convertir les sauts de ligne en CR-LF. Ou utilisez PowerShell:

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

Vous pouvez utiliser le propriété NewLine statique de la classe Environment pour obtenir le retour à la ligne approprié:

$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
19
Aaron Jensen

Il est également possible d'affecter des nouvelles lignes et des retours à la ligne à des variables, puis de les ajouter à des textes contenus dans des scripts PowerShell:

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

Essaye ça;

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