2016-04-12 10 views
1

In Powershell 2.0, Ich beginne ein cmd.exe Prozess in einem neuen Fenster mit dem folgenden:-Monitor anderer Prozess die Ausgabe in Powershell 2.0

Start-Process cmd.exe "/k proc.cmd" 

Gibt es eine Möglichkeit, um diesen Prozess der Standardausgabe zu überwachen und zu reagieren in Echtzeit (z. B. Ausführen eines Befehls, wenn der Prozess "Completed" ausgibt), ohne seine Konsolenausgabe auszublenden?

+0

Dies könnte nützlich sein: [Umleiten-Ausgabe-on-Kind-Prozess-to- parent-process-powershell] (http://stackoverflow.com/questions/11323922/redirecting-output-on-child-process-to-parent-process-powershell), aber es sieht so aus, als ob die Antwort auf diese Frage auf die Prozess vor dem Lesen zu beenden ard output ... –

+0

Danke, Sie haben Recht, die Antwort wartet auf den Prozess zu beenden. Ich aktualisierte meine Frage, um zu spezifizieren, dass ich die Ausgabe in der Realzeit überwachen muss, da der Prozess nie an seinem eigenen endet –

+1

Leider hat PSv2 Register-ObjectEvent nicht, das benutzt werden kann, um auf Standardausgabe-/Fehlerereignisse von zu hören ein laufender Prozess ... Ich denke, das ist eine Antwort, die an einem anderen Tag geschrieben werden kann. –

Antwort

1

Verwenden Sie nicht start-process - Sie sehen die Ausgabe in Echtzeit in Ihrer aktiven Konsole. Wenn Sie es auf diese Weise benötigen, dann

  • Ihre Linie innerhalb Job ausgeführt
  • Verwendung Schleife periodisch (beispielsweise alle 1 s), um die Arbeitsplätze Ausgabe über receive-job bekommen.

EDIT

Das ist das Beispielskript ist, das zeigt, was Sie wollen

$j = start-job { while(1) { Get-Random; sleep 1 } } 
while($j.State -eq 'Running') { 
    $out = Receive-Job -Job $j 
    $out 
    if ($out -like '*44*') { break } 
    sleep 1 
} 
+0

Ich bin mir nicht sicher, ob ich das verstehe. Ich muss den Prozess in einem neuen Fenster starten und auf seine Ausgabe reagieren. Ich habe versucht, Start-Job zu verwenden, aber es macht den neuen Prozess im Hintergrund ausgeführt (Bedeutung, dass kein neues Fenster erstellt wird). –

+0

Sie müssen 'receive-job' verwenden, um die Jobausgabe zu erhalten. Dann kannst du darauf reagieren - du brauchst dafür kein Fenster – majkinetor

+0

Siehe meinen bearbeiteten Post. – majkinetor