Start-Process to cmdlet PowerShella, który uruchamia proces (aplikację, skrypt, plik) na lokalnym komputerze. To PowerShellowy odpowiednik „kliknij dwa razy w ikonę”, tyle że z pełną kontrolą: możesz podać argumenty, odpalić program jako administrator, wskazać katalog roboczy, przekierować wyjście do pliku albo poczekać, aż proces się skończy. Przydaje się wszędzie tam, gdzie w skrypcie chcesz odpalić coś zewnętrznego i mieć wpływ na to, jak się uruchomi.
Składnia i najważniejsze opcje
Podstawowa forma wygląda tak: Start-Process [-FilePath]
-FilePath— ścieżka do pliku lub nazwa programu do uruchomienia (parametr pozycyjny, więc możesz go pominąć i podać ścieżkę jako pierwszą).-ArgumentList— parametry przekazywane do uruchamianego programu, np. przełączniki wiersza poleceń.-Verb— czasownik akcji zależny od typu pliku; najczęściejRunAs, które odpala proces z uprawnieniami administratora (wyskakuje UAC).-Wait— każe cmdletowi czekać, aż proces i jego potomkowie się zakończą, zanim skrypt pójdzie dalej.-NoNewWindow— uruchamia proces w bieżącym oknie konsoli zamiast otwierać nowe (domyślne zachowanie w Windows).-WorkingDirectory— ustawia katalog roboczy dla nowego procesu.-RedirectStandardOutput/-RedirectStandardError— przekierowują wyjście lub błędy procesu do wskazanego pliku.-PassThru— zwraca obiekt procesu, dzięki czemu możesz go później zapisać do zmiennej i np. sprawdzić kod wyjścia.
Przykłady użycia
Start-Process notepad.exe— otwiera Notatnik w nowym oknie. Klasyk na rozgrzewkę.Start-Process powershell -Verb RunAs— odpala nową konsolę PowerShell z podniesionymi uprawnieniami (zobaczysz okno UAC).Start-Process ping -ArgumentList "learningzone.pl","-n","4" -NoNewWindow -Wait— uruchamia ping w tym samym oknie i czeka na zakończenie, zanim skrypt pójdzie dalej.Start-Process msiexec.exe -ArgumentList "/i app.msi /quiet" -Wait— instaluje pakiet MSI po cichu i blokuje skrypt do końca instalacji. Wygodne przy automatyzacji wdrożeń.$p = Start-Process cmd -ArgumentList "/c dir" -RedirectStandardOutput out.txt -PassThru -Wait; $p.ExitCode— zapisuje wyjście doout.txt, przechwytuje obiekt procesu i odczytuje jego kod wyjścia.
Częste błędy i pułapki
Najczęstsza wpadka to argumenty ze spacjami — jeśli ścieżka ma spację, opakuj ją w cudzysłów wewnątrz -ArgumentList, bo inaczej PowerShell potnie je na kawałki. Druga pułapka: -NoNewWindow i -Verb wykluczają się — nie użyjesz naraz podniesienia uprawnień i uruchomienia w bieżącym oknie, bo elewacja wymaga osobnego procesu. Kolejna: bez -Wait skrypt leci dalej natychmiast, więc jeśli liczysz na wynik uruchomionego programu, a go nie dodasz, dostaniesz wyścig. I na koniec — Start-Process to nie to samo co odpalenie programu wprost (np. ping ...): cmdlet zawsze uruchamia nowy proces i domyślnie nie przechwytuje jego wyjścia do potoku, więc | nie zadziała tak, jak się spodziewasz.
Powiązane komendy: Start-Job (zadania w tle), Invoke-Command (zdalne uruchamianie), Stop-Process i Get-Process (zarządzanie procesami), Wait-Process (czekanie na zakończenie procesu).