如何将 json 对象添加到参数中

How to add json object to arguments

我正在尝试使用 cmd 将 json 对象添加到我的 powershell 脚本中。我的问题是,我收到了字符串但没有任何引号。

我的脚本。ps1:

Write-Host ($args[0] | Format-Table | Out-String)

我的命令行:

C:\path\to\powershell.exe ./script.ps1 '{"key1":"val1","all":[{"key2":"val2","key3":"val3","key4":["val5","val6"]},{"key5":"val7","key6":"val8","key7":["val9","val10"]}],"key8":0}'

结果:

{key1:val1,all:[{key2:val2,key3:val3,key4:[val5,val6]},{key5:val7,key6:val8,key7:[val9,val10]}],key8:0}

如何让我的 json 带引号?

当使用 PowerShell 的 CLI 时,unescaped " 在命令行上是在命令行解析期间删除,只有然后是解释为要执行的PowerShell代码的结果(由于(暗示) 使用 -Command / -c 参数).[1]

你有两个选项:

  • 正如 Compo 在他的评论中指出和演示的那样, 转义了所有 " 个字符。因为 \" 会起作用 - 转义确保它们以未转义的形式 保留 ,因此成为要执行的 PowerShell 代码的一部分。

  • 如果您想避免转义,请通过管道[=]提供文本 57=](标准输入):

echo {"key1":"val1","all":[{"key2":"val2","key3":"val3","key4":["val5","val6"]},{"key5":"val7","key6":"val8","key7":["val9","val10"]}],"key8":0}| powershell.exe -c ./script.ps1 $input

请注意 | 之前没有 space,否则 space 将成为输入的一部分。

在 PowerShell 命令中,通过 automatic $input variable

访问管道输入的文本

[1] 正是出于这个原因,外部 '...' 引用 而不是 保护其中未转义的 " :在命令行的初始解析期间,' 个字符具有 没有 句法含义。