2016-09-22 1 views
-1

Ceci est le fichier dummy.json

{ 
    "key1":"value1", 
    "key2":"value2" 
} 

Je lis le contenu de ce fichier à une variable et les sortir

C:> $obj = Get-Content .\dummy.json 
C:> $obj 
{ 
     "key1":"value1", 
     "key2":"value2" 
} 
C:> Write-Host "$obj" 
{  "key1":"value1",  "key2":"value2" } 

Je sais que Get-Content ne conserve pas les sauts de ligne et le rejoint par "". Powershell keep text formatting when reading in a file

Mais pourquoi y a-t-il une incohérence dans les 2 sorties ci-dessus? Je suppose que Write-Host fait son travail correctement. Ou ai-je tort ?

+0

Salut, qu'en 'Write-Host obj' de $? – sodawillow

+0

@sodawillow Oui, ça marche. – Srinath

Répondre

3

Ce n'est pas Get-Content qui joint les lignes (sa sortie est un tableau de chaînes), mais vous mettez la variable entre guillemets ("$obj"). Vous pouvez éviter cela en joignant les lignes vous-même:

Write-Host ($obj -join "`n") 
Write-Host ($obj | Out-String) 
Write-Host $($OFS="`n"; "$obj") 

Une autre option serait de lire le fichier directement en une seule chaîne, par exemple comme celui-ci (nécessite v3 PowerShell ou plus récent):

$obj = Get-Content .\dummy.json -Raw 

ou comme ceci:

$obj = [IO.File]::ReadAllText('.\dummy.json') 
+0

Cool, j'ai compris. Donc, ma compréhension de Get-Content et Write-Host était erronée. Merci :) – Srinath