在pwsh中调用以下命令:
Write-Host '{"drop_attr": "name"}'
结果确定:
{"drop_attr": "name"}
现在通过pwsh进行相同操作:
pwsh -Command Write-Host '{"drop_attr": "name"}'
结果缺少引号和方括号吗?
drop_attr: name
答案 0 :(得分:1)
不幸的是,PowerShell对带有嵌入式"
字符的传递参数的处理。 外部程序-包括PowerShell自己的CLI(pwsh
)-从根本上被破坏了(并且一直存在):
您需要手动嵌入参数中的\
-转义"
实例,以使它们正确地传递给外部程序:
pwsh -Command ' ''{\"drop_attr\": \"name\"}'' '
请注意,我假设您的意图是传递JSON字符串,因此内部的'' ... ''
引号(转义的单引号)可以确保pwsh
最终看到单引号的字符串({ {1}})。 (不需要显式的输出命令; PowerShell 隐式会打印命令和表达式输出)。
请注意,如果您使用 script块调用'...'
,则在 inside PowerShell中,可以避免进行\
转义的情况(pwsh
):
{ ... }
This GitHub docs issue包含背景信息。
This GitHub bug report讨论了该问题;从PowerShell [Core] 7起,讨论的状态似乎是:
答案 1 :(得分:1)
另一种方式。您使用Windows还是Unix?
pwsh -c "[pscustomobject]@{drop_attr='name'} | convertto-json -compress"
{"drop_attr":"name"}
答案 2 :(得分:0)
另一种方法是使用“编码命令”。
> $cmd1 = "Write-Host '{ ""description"": ""Test program"" }'"
> pwsh -encoded ([Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($cmd1)))
{ "description": "Test program" }