写输出不一致" $ obj"并在Powershell中直接打印$ obj

时间:2016-09-22 11:46:00

标签: powershell

这是dummy.json文件

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

我正在将此文件的内容读取到变量并输出它们

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

我知道Get-Content不会保留换行符并加入" &#34 ;. Powershell keep text formatting when reading in a file

但为什么上述两项产出存在不一致之处呢?我猜Write-Host正在正常工作。或者我错了吗?

1 个答案:

答案 0 :(得分:3)

加入行不是Get-Content(它的输出是字符串数组),而是将变量放在双引号("$obj")中。您可以通过自己加入这些行来避免这种情况:

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

另一种选择是直接将文件作为单个字符串读取,例如像这样(需要PowerShell v3或更新版本):

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

或者像这样:

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