Mam skrypt programu PowerShell 1.0, aby po prostu otworzyć kilka aplikacji. Pierwsza to maszyna wirtualna, a pozostałe to aplikacje programistyczne. Chcę, aby maszyna wirtualna zakończyła uruchamianie przed otwarciem pozostałych aplikacji.
W bashu mógłbym tylko powiedzieć "cmd1 && cmd2"
To właśnie mam ...
C:\Applications\VirtualBox\vboxmanage startvm superdooper
&"C:\Applications\NetBeans 6.5\bin\netbeans.exe"
źródło
| out-null
zrobiłem tylko to, czego potrzebowałem. Próbowałem używać,Start-Job
ale ponieważ przekazuję wyniki funkcji jako parametry, mam na sobie trochę skitzoidu, więc nie mogłem użyć ostatniej sugestii ...-ArgumentList
, oddziel je przecinkami, takimi jak-ArgumentList /D=test,/S
.Oprócz użycia
Start-Process -Wait
, potokowanie danych wyjściowych pliku wykonywalnego spowoduje, że Powershell zaczeka. W zależności od potrzeby, będę zazwyczaj rura doOut-Null
,Out-Default
,Out-String
lubOut-String -Stream
. Oto długa lista niektórych innych opcji wyjściowych.Tęsknię za operatorami stylu CMD / Bash, o których wspominałeś (&, &&, ||). Wydaje się, że musimy być bardziej gadatliwi w Powershell .
źródło
Out-String
zmienia dane wyjściowe na pojedynczy, wielowierszowy ciąg, podczas gdy PowerShell domyślnie zwraca tablicę wierszy .Start-Process
należy unikać aplikacji konsolowych (chyba że naprawdę chcesz uruchomić je w nowym oknie ), ponieważ nie będziesz w stanie przechwycić ani przekierować ich danych wyjściowych.Wystarczy użyć „Proces oczekiwania”:
Praca jest wykonywana
źródło
Jeśli użyjesz
Start-Process <path to exe> -NoNewWindow -Wait
Możesz także użyć tej
-PassThru
opcji, aby wygenerować echo.źródło
-PassThru
nie echo danych wyjściowych (aplikacja nie będąca konsolą z definicji nie generuje danych wyjściowych konsoli), generujeSystem.Diagnostics.Process
instancję, która reprezentuje nowo uruchomiony proces, więc możesz sprawdzić jego właściwości i poczekać, aż wyjdzie później.Niektóre programy nie potrafią bardzo dobrze przetwarzać strumienia wyjściowego, użycie potoku
Out-Null
może go nie zablokować.I
Start-Process
potrzebuje-ArgumentList
przełącznika do przekazywania argumentów, co nie jest tak wygodne.Istnieje również inne podejście.
źródło
Dołączenie opcji
-NoNewWindow
powoduje błąd:Start-Process : This command cannot be executed due to the error: Access is denied.
Jedynym sposobem, w jaki mogłem go uruchomić, było zadzwonienie:
źródło
Idąc dalej, możesz nawet parsować w locie
na przykład
źródło
Zawsze jest cmd. Może być mniej irytujące, jeśli masz problemy z cytowaniem argumentów do rozpoczęcia procesu:
źródło