将命令输出作为Powershell咒语运行

时间:2019-04-08 11:38:12

标签: powershell

我有一个bash脚本,该脚本会生成程序指令(@Transactional,带有一堆参数)并将其打印到标准输出中。我想从powershell运行输出,以后可以选择附加其他参数。

我尝试过

docker run ...

但是我得到了错误

  

术语“ docker run --rm -ti []”未识别为cmdlet,函数,脚本文件或可运行程序的名称。检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。

很明显,D:\> & $(wsl ./my-bash-script.sh) some more args 将整个输出解释为单个命令,而实际上,只有输出的第一个单词是命令。剩下的就是参数。

有没有办法做我想做的事?

1 个答案:

答案 0 :(得分:1)

是的,&仅支持命令名称或路径作为其第一个参数-您不能包含参数。

您需要的是Invoke-Expression

Invoke-Expression "$(wsl ./my-bash-script.sh) some more args"

注意:如果&脚本输出带有带引号的可执行路径的命令,则只需要在字符串中插入.sh < / p>

还请注意,PowerShell不会始终以类似于POSIX的外壳程序(例如Bash)的方式解释给定的命令行,因为它可以在参数的开头识别其他元字符。值得注意的是,PowerShell不会将前缀为@{的参数用作文字。

顺便说一句:尽管这是Invoke-Expression的合法用例-假设您信任.sh脚本-Invoke-Expression should generally be avoided的输出。