[英]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.