繁体   English   中英

转换为base64后,Powershell convertfrom -Json错误

[英]Powershell convertfrom -Json error after converting to base64

我正在尝试在Powershell中执行以下操作,但出现错误,无法找出原因。

下面工作正常

$config = @"
{
    "Common.BinDir": "G:\result",
    "Infrastructure.WebRoot": "G:\result20171120"
}
"@

$abc = ConvertFrom-Json $testconfig

但是当我传入上面的base64时(因为我使用的脚本期望base64)

$config = "QCINCnsNCgkiQ29tbW9uLkJpbkRpciI6ICJHOlxyZXN1bHQiLA0KCSJJbmZyYXN0cnVjdHVyZS5XZWJSb290IjogIkc6XHJlc3VsdDIwMTcxMTIwIg0KfQ0KIkA="
$decodedConfig = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($config))
$abc = ConvertFrom-Json $decodedConfig

运行convert命令时出现以下错误

ConvertFrom-Json : Invalid JSON primitive: .
At line:1 char:8
+ $abc = ConvertFrom-Json $decodedConfig
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], 
ArgumentException
    + FullyQualifiedErrorId : 
System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

以下代码段应该可以在给定的$config正常工作:

$config = "QCINCnsNCgkiQ29tbW9uLkJpbkRpciI6ICJHOlxyZXN1bHQiLA0KCSJJbmZyYXN0cnVjdHVyZS5XZWJSb290IjogIkc6XHJlc3VsdDIwMTcxMTIwIg0KfQ0KIkA="
$decodedConfig = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($config))
$abc = ConvertFrom-Json -InputObject $(
    Invoke-Expression -Command $decodedConfig.Replace('\', '\\')
    )

我相信有两件事
1)从base64解码的字符串包含@“和” @-作为字符串的一部分,而不是限定符-因此

$decodedString是:

@"
{
    "Common.BinDir": "G:\result",
    "Infrastructure.WebRoot": "G:\result20171120"
} 
"@

$config是:

{
    "Common.BinDir": "G:\result",
    "Infrastructure.WebRoot": "G:\result20171120"
}

以下将适用于您的情况(尽管必须有更好的方法来做到)

$abc = ConvertFrom-Json 
($decodedConfig($decodedConfig.Replace('@"','')).replace('"@',''))

2)您需要对.Json文件中的\\进行屏蔽,因此有效地您需要使用\\\\因此实际上您的Json应该如下所示:

@"
{
    "Common.BinDir": "G:\\result",
    "Infrastructure.WebRoot": "G:\\result20171120"
} 
"@

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM