首页 > 解决方案 > 如何将解析的 json 文件从 json 转换回 json?

问题描述

我正在使用 powershell ConvertTo-Json 生成解析的 JSON 文件。直到这里一切都很好,因为现在我想将它从 json 转换,使用这些值,然后将它转换回 json,并像以前一样使用它们的值。但是当我将文件转换回 json 时,它只显示 null 的值......有没有办法解决这个问题?

这是我创建解析文件的代码:

$secFile = "C:\some\folder\creds.json"
$in = Get-Content $secFile | ConvertFrom-Json
[ordered]@{
        pcname='ENTER HERE';
        share='\\$in.pcname\C$';
        filename='ENTER HERE';
        destfilepath='Scripts\Cert';
        destfile='$in.share\$in.destfilepath\$in.filename';
        RDdestfile='C:\$in.destfilepath\';
        Username="ENTER HERE";
        Password="ENTER HERE";
        EncryptedPassword=""
    } | ConvertTo-Json | Foreach {[System.Text.RegularExpressions.Regex]::Unescape($_)} | Out-File "$secFile"

以下是将文件转换回 json 的代码:

[ordered]@{
            pcname=$in.pcname;
            share=$in.share;
            filename=$in.filename;
            destfilepath=$in.destfilepath;
            destfile=$in.destfile;
            RDdestfile=$in.RDdestfile;
            Username=$in.Username;
            Password="";
            EncryptedPassword="$secString"
        } | ConvertTo-Json | Out-File "$secFile"

这是将其转换回json后的文件:

{
    "pcname":  null,
    "share":  null,
    "filename":  null,
    "destfilepath":  null,
    "destfile":  null,
    "RDdestfile":  null,
    "Username":  null,
    "Password":  "",
    "EncryptedPassword":  "01000000d08c9ddf0115d1118c7a00c04fc297eb010000006f6d3ce161a681428efe68b51827a6640000000002000000000003660000c0000000100000002a6a1ff60cb280662a9578cb47926a4d0000000004800000a000000010000000a65a1cd7137935dbfcd22bcdc685f52a20000000b87554b4f6f6dbe655cd525a894e1c7d1180b4db121385e57b218fa772ad1d441400000048453bb6e137ed437de3e4ecbd855429ddfc1fba"
}

这在我解析文件之前有效。所以这不可能是错误,对吧?

我既不是 powershell 也不是 json pro,所以我真的希望能得到很好的帮助

问候

马丁

标签: jsonwindowspowershellcertificateweb-deployment

解决方案


如果我以您的示例进行导出和重新导入,则会出现错误。

[pscustomobject]@{

    pcname='ENTER HERE';
    share='\\ENTER HERE\C$';
    filename='ENTER HERE';
    destfilepath='some\folder';
    #destfile='$in.share\$in.destfilepath\$in.filename';
    RDdestfile='C:\$in.destfilepath\';
    Username="ENTER HERE";
    Password="ENTER HERE";
    EncryptedPassword=""

} | Convertto-Json -OutVariable results |
    Foreach {[System.Text.RegularExpressions.Regex]::Unescape($_)} |
        Out-File $secFile

Get-Content $secFile | Convertfrom-json

错误

At line:14 char:28
+     Get-Content $secFile | Convertfrom-json
+                            ~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

但是,如果我只是删除正则表达式的转义,它就可以正常工作。

[pscustomobject]@{

    pcname='ENTER HERE';
    share='\\ENTER HERE\C$';
    filename='ENTER HERE';
    destfilepath='some\folder';
    #destfile='$in.share\$in.destfilepath\$in.filename';
    RDdestfile='C:\$in.destfilepath\';
    Username="ENTER HERE";
    Password="ENTER HERE";
    EncryptedPassword=""

} | Convertto-Json -OutVariable results| Out-File $secFile

Get-Content $secFile | Convertfrom-json

输出

pcname            : ENTER HERE
share             : \\ENTER HERE\C$
filename          : ENTER HERE
destfilepath      : some\folder
RDdestfile        : C:\$in.destfilepath\
Username          : ENTER HERE
Password          : ENTER HERE
EncryptedPassword : 

这是必需的吗?


推荐阅读