Start-Process

Uruchamia jeden lub więcej procesów (aplikacji) lokalnie.

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] [-ArgumentList ] [-Verb ] [-PassThru]

  • -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ęściej RunAs, 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 do out.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).