适用于 Linux 的 Powershell:将命令与管道符号结合起来不起作用

Posted

技术标签:

【中文标题】适用于 Linux 的 Powershell:将命令与管道符号结合起来不起作用【英文标题】:Powershell for Linux: Combining commands with pipe sign doesn't work 【发布时间】:2022-01-23 21:19:04 【问题描述】:

有什么方法可以在 Powershell for Linux 中连接命令?

这就是我要运行的:

pwsh -Command Invoke-ScriptAnalyzer -Path . | ConvertTo-Json | Out-File -FilePath "/home/administrator/scripts/test.json"

因此,运行 Invoke-ScriptAnalyzer,将结果转换为 Json 并将结果保存到 test.json。

它无法识别 | 之后的任何内容签到:

./test.sh: line 1: ConvertTo-Json: command not found

./test.sh: line 1: Out-File: command not found

我需要将其放入 bash 脚本中,因此需要使用 -Command 选项启动 pwsh。

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

正如所写,您的| 符号由您的 Linux shell(例如 bash)解释,不是由 PowerShell 解释。

有两种解决方案:

最好引用整个-Command 参数(在POSIX 兼容的shell 中,'...' 字符串,例如bash 使用字符串的内容逐字):
pwsh -Command 'Invoke-ScriptAnalyzer -Path . | ConvertTo-Json | Out-File -FilePath "/home/administrator/scripts/test.json"'

或者,单独\-逐字转义您希望通过的所有Linux-shell元字符,例如\|\"在这种情况下:
pwsh -Command Invoke-ScriptAnalyzer -Path . \| ConvertTo-Json \| Out-File -FilePath \"/home/administrator/scripts/test.json\"

注意:在这种情况下,pwsh-Command 之后接收多个 参数。但是,PowerShell 只是在将结果解释为 PowerShell 代码之前加入它们。 这与 POSIX 兼容 shell 的命令行处理不同,后者将 first post--c 参数解释为隐式的临时 script,并带有 附加参数作为逐字参数传递到该脚本,可以像往常一样访问$1,...

【讨论】:

以上是关于适用于 Linux 的 Powershell:将命令与管道符号结合起来不起作用的主要内容,如果未能解决你的问题,请参考以下文章

powershell Powershell尝试捕获,仅适用于v2

powershell 适用于PS Core的Windows PowerShell模块

适用于 Linux 的 Windows 子系统安装指南 (Windows 10) (微软官方文档)

powershell 适用于标准版和企业版的SharePoint PowerShell许可证映射

Powershell:如何在未连接的计算机上安装适用于 PowerShell 的 Nuget 提供程序,以便可以从 PS 命令行安装 nuget 包?

从 Azure DevOps 管道启动适用于 VS 2019 的开发人员 PowerShell