Powershell: Uruchomić proces i poczekać aż się skończy

2-Mar-2016

Skrypty powershellowe są często używane do automatyzacji instalacji oprogramowania na serwerach. Podczas tej instalacji często spotyka się 3 główne kroki:

1. Przygotowanie instalacji, np sprawdzenie czy są obecne inne wymagane komponenty, czy jest wystarczająca ilość miejsca na dysku, czy są odpowienie foldery itp. Na tym etapie również często przekoiowujemy na serwer binaria instalacyjne

2. Właściwa instalacja programu – zazwyczaj uruchomienie batch-a instalacyjnego lub programu setup.exe z odpowienimi parametrami

3. Czynności poinstalacyjne, jak np.: usunięcie plików instalacyjnych, uruchomienie usług, konfiguracja zainstalowanego programu itp.

O ile przejście od kroku pierwszego do drugiego jest proste, bo po wykonaniu wszystkich zadań z kroku 1 przechodzisz po prostu do kroku 2, o tyle moment w którym należy wykonać krok 3 nie jest już taki oczywisty. Krok ten należy wykonać dopiero po zakończeniu pracy instalatora, który nie jest twoim skryptem, ale raczej zewnętrznym programem.

I tu przychodzi z pomocą parametr -Wait, który można używać wraz z poleceniem Start-Process:

Start-Process -FilePath "notepad.exe" -PassThru -Wait

Powyższa instrukcja uruchamia notatnik, ale skrypt zatrzyma się do momentu zakończenia naotatnika. Gdyby to polecenie uruchamiać bez przełącznika -Wait, to proces notatnika również się uruchomi, ale zaraz potem, mimo tego, że notatnik nadal działa, skrypt będzie kontynuwał pracę. 

Parametr -PassThru, który również jest widoczny w tej komendzie powoduje, że obiekt procesu jest zwracany na wyjściu, można go więc np zapisać do zmiennej lub przesłać potokiem do kolejnych komend. Całkiem sensowne, zwłaszcza, jeżeli znasz kody wyjścia zwracane przez właśnie uruchamiany program. Polecenie:

$proc = Start-Process -FilePath "notepad.exe" -PassThru -Wait
$proc.ExitCode

pozwoli zobaczyć kod wyjścia uruchomionego i zakończonego procesu. Zauważ, że gdyby w tym poleceniu nie było -Wait, to kod wyjścia nie jest jeszcze znany…

Dodaj komentarz:

Autor: Rafał Kraik