Powershell pwsh-命令正在删除引号
在pwsh中调用以下命令:Powershell pwsh-命令正在删除引号,powershell,Powershell,在pwsh中调用以下命令: Write-Host '{"drop_attr": "name"}' pwsh -Command Write-Host '{"drop_attr": "name"}' 结果正常: {"drop_attr": "name"} 现在通过pwsh执行相同操作: Write-Host '{"drop_attr": "name"}' pwsh -Command Write-Host '{"drop_attr": "name"}' 结果是缺少引号和方括号 drop_
Write-Host '{"drop_attr": "name"}'
pwsh -Command Write-Host '{"drop_attr": "name"}'
结果正常:
{"drop_attr": "name"}
现在通过pwsh执行相同操作:
Write-Host '{"drop_attr": "name"}'
pwsh -Command Write-Host '{"drop_attr": "name"}'
结果是缺少引号和方括号
drop_attr: name
不幸的是,从PowerShell 7.1开始,PowerShell使用嵌入的
“
字符向外部程序传递参数的处理(包括PowerShell自己的CLI(pwsh
),从根本上被打破了
您需要手动\
-转义“
嵌入参数中的实例,以便将它们正确传递给外部程序:
pwsh -Command ' ''{\"drop_attr\": \"name\"}'' '
注意,我假设您的目的是传递一个JSON字符串,因此内部的“”…“”
quoting(转义单引号),它确保pwsh
最终看到一个带引号的字符串(“…”
)。(无需显式输出命令;PowerShell隐式打印命令和表达式输出)
请注意,如果使用脚本块(
{…}
)调用pwsh
,,则可以从PowerShell内部避免\
-转义的需要,但是仅在调用PowerShell本身时有效,而不是在调用其他外部程序时有效:
# NOTE: Works from PowerShell only.
pwsh -Command { '{"drop_attr": "name"}' }
关于PowerShell在外部程序调用中嵌入
“
的参数处理失败的背景信息,自PowerShell 7.1起:
- 包含背景信息
- 讨论问题,已中断行为的详细信息以及手动解决方法总结在中;截至PowerShell[Core]7的讨论状态似乎是:
- 对于v7.2,修复最早被视为一种功能。它是否会成为一种常规功能,即默认行为是否会被修复,修复是否需要选择加入,或者即使该功能将成为正式功能,仍有待观察
- 修复默认行为将严重破坏向后兼容性;在撰写本文时,这是不允许的,但关于将来是否允许以及如何管理的讨论已经开始:请参阅
- 请参阅,但在撰写本文时,它缺少批处理文件和Windows上的
-样式可执行文件的重要功能-请参阅msiexec
- 对于v7.2,修复最早被视为一种功能。它是否会成为一种常规功能,即默认行为是否会被修复,修复是否需要选择加入,或者即使该功能将成为正式功能,仍有待观察
- 同时,您可以使用中的PSv3+
帮助函数(在PSv5+中,使用的ie
进行安装),该函数在内部补偿所有中断的行为,并允许按预期传递参数;例如,安装模块本机
将正常工作ie pwsh-Command''{“drop_attr”:“name”}'
pwsh -c "[pscustomobject]@{drop_attr='name'} | convertto-json -compress"
{"drop_attr":"name"}
另一种方法是使用“编码命令”
可能是问题!谢谢我在MacOS上,我让它在一行中工作如果您从PowerShell调用,
pwsh-Command{Write Host'{“description”:“Test program”}
免费为您提供此功能(在后台使用-encodedcomma
)。