pwsh-命令正在删除引号

时间:2019-11-25 16:51:05

标签: powershell

在pwsh中调用以下命令:

Write-Host '{"drop_attr": "name"}' 

结果确定:

{"drop_attr": "name"}

现在通过pwsh进行相同操作:

pwsh -Command Write-Host '{"drop_attr": "name"}'

结果缺少引号和方括号吗?

drop_attr: name

3 个答案:

答案 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" }