Ich habe ein PowerShell 1.0-Skript, um nur eine Reihe von Anwendungen zu öffnen. Die erste ist eine virtuelle Maschine und die anderen sind Entwicklungsanwendungen. Ich möchte, dass die virtuelle Maschine den Startvorgang beendet, bevor die restlichen Anwendungen geöffnet werden.
In Bash könnte ich nur sagen "cmd1 && cmd2"
Das habe ich ...
C:\Applications\VirtualBox\vboxmanage startvm superdooper
&"C:\Applications\NetBeans 6.5\bin\netbeans.exe"
quelle
| out-null
tat genau das, was ich brauchte. Versucht mit,Start-Job
aber weil ich die Ergebnisse von Funktionen als Parameter übergebe, wurde es ein wenig skitzoid auf mich, so dass ich den letzten Vorschlag nicht verwenden konnte ...-ArgumentList
, trennen Sie sie durch Kommas wie-ArgumentList /D=test,/S
.Neben der Verwendung
Start-Process -Wait
lässt das Weiterleiten der Ausgabe einer ausführbaren Datei Powershell warten. Je nach Bedarf, werde ich normalerweise RohrOut-Null
,Out-Default
,Out-String
oderOut-String -Stream
. Hier ist eine lange Liste einiger anderer Ausgabeoptionen.Ich vermisse die CMD / Bash-Operatoren, auf die Sie verwiesen haben (&, &&, ||). Es scheint, dass wir mit Powershell ausführlicher umgehen müssen .
quelle
Out-String
wird die Ausgabe in eine einzelne mehrzeilige Zeichenfolge geändert , während PowerShell standardmäßig ein Array von Zeilen zurückgibt .Start-Process
sollte für Konsolenanwendungen vermieden werden (es sei denn, Sie möchten sie wirklich in einem neuen Fenster ausführen ), da Sie ihre Ausgabe nicht erfassen oder umleiten können.Verwenden Sie einfach "Wait-process":
Arbeit ist erledigt
quelle
Wenn du benutzt
Start-Process <path to exe> -NoNewWindow -Wait
Sie können die
-PassThru
Option auch verwenden, um die Ausgabe zu wiederholen.quelle
-PassThru
nicht Echo Ausgang (eine nicht-Konsole-Anwendung per Definition nicht Konsolenausgabe erzeugen), es gibt eineSystem.Diagnostics.Process
Instanz, die den neu gestarteten Prozess darstellt, so dass Sie seine Eigenschaften und Warte untersuchen können es später zu verlassen.Einige Programme können den Ausgabestream nicht sehr gut verarbeiten. Wenn Sie Pipe verwenden, wird er
Out-Null
möglicherweise nicht blockiert.Und
Start-Process
braucht den-ArgumentList
Schalter, um Argumente zu übergeben, nicht so bequem.Es gibt auch einen anderen Ansatz.
quelle
Das Einschließen der Option
-NoNewWindow
gibt mir einen Fehler:Start-Process : This command cannot be executed due to the error: Access is denied.
Ich konnte es nur zum Laufen bringen, indem ich anrief:
quelle
Wenn Sie weiter gehen, können Sie sogar spontan analysieren
z.B
quelle
Es gibt immer cmd. Es kann weniger ärgerlich sein, wenn Sie Probleme haben, Argumente für den Startprozess zu zitieren:
quelle