2017-05-31 1 views
2

In Unix-Shell, können Sie schreiben:Bash/Batch-like Subshell in Powershell

(cmd1 ; cmd2) | cmd3 

In Windows Batch, können Sie diese schreiben

(cmd1 & cmd2) | cmd3 

In beiden Fällen die Ausgabe von cmd1 und cmd2 wird an Stdin an cmd3 übergeben.

Ist es möglich, dasselbe in Powershell zu tun?

Ich habe keine gültige Syntax gefunden, die dies erlaubt. Ich würde ein Anweisungsblock erwarten zu arbeiten, wie diese, aber es funktioniert nicht:

{ cmd1 ; cmd2) | cmd3 

ich es bekommen kann, indem er erklärt, eine Funktion zu arbeiten:

function f() { 
    cmd1 
    cmd2 
} 
f | cmd3 

Gibt es eine Syntax, die erlaubt Das soll in-line gemacht werden?

Antwort

0

Ich denke, das funktioniert:

Invoke-Command {cmd1; cmd2} | cmd3 

Per die documentation:

Die Invoke-Command-Cmdlets führt Befehle auf einem lokalen oder Remote-Computer und gibt alle Ausgaben von den Befehlen, einschließlich Fehlern .

...

Sie können auch Invoke-Command auf einem lokalen Computer verwenden, um eine Zeichenfolge in einem Skriptblock als Befehl auswerten oder ausführen. Windows PowerShell konvertiert den Skriptblock in einen Befehl und führt den Befehl sofort im aktuellen Bereich aus, statt nur die Zeichenfolge in der Befehlszeile zu wiederholen.