Powershell中的Bash / batch-like子shell

时间:2017-05-31 10:03:03

标签: powershell

在Unix shell中,你可以这样写:

hdc.fill();

在Windows Batch中,您可以编写此

( cmd1 ; cmd2 ) | cmd3

在这两种情况下,cmd1和cmd2的输出都传递给stdin上的cmd3。

是否有可能在Powershell中做同样的事情?

我还没有找到允许这种情况的有效语法。我期望一个语句块可以工作,就像这样,但它没有:

( cmd1 & cmd2 ) | cmd3

我可以通过声明一个函数来实现它:

{ cmd1 ; cmd2 ) | cmd3

是否有允许在线完成此操作的语法?

2 个答案:

答案 0 :(得分:2)

我认为这有效:

Invoke-Command {cmd1; cmd2} | cmd3

根据documentation

  

Invoke-Command cmdlet在本地或远程计算机上运行命令   并返回命令的所有输出,包括错误。

     

...

     

您还可以在本地计算机上使用Invoke-Command进行评估或运行   脚本块中的字符串作为命令。 Windows PowerShell转换   脚本阻止命令并立即运行命令   当前范围,而不是仅在命令行回显字符串。

答案 1 :(得分:0)

您可以直接调用powershell来生成一个真正的子shell(即,子shell不会修改外壳的状态):

pwsh -Command { cmd1 ; cmd2 } | cmd3

由于powershell将对象而不只是字符串作为输入,因此-Command参数可以采用脚本块。