Start-Process

Uruchamia co najmniej jeden proces na komputerze lokalnym.

Składnia

Start-Process
     [-FilePath] <String>
     [[-ArgumentList] <String[]>]
     [-Credential <PSCredential>]
     [-WorkingDirectory <String>]
     [-LoadUserProfile]
     [-NoNewWindow]
     [-PassThru]
     [-RedirectStandardError <String>]
     [-RedirectStandardInput <String>]
     [-RedirectStandardOutput <String>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-UseNewEnvironment]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Start-Process
     [-FilePath] <String>
     [[-ArgumentList] <String[]>]
     [-WorkingDirectory <String>]
     [-PassThru]
     [-Verb <String>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

Opis

Polecenie Start-Process cmdlet uruchamia co najmniej jeden proces na komputerze lokalnym. Domyślnie Start-Process tworzy nowy proces, który dziedziczy wszystkie zmienne środowiskowe zdefiniowane w bieżącym procesie.

Aby określić program uruchamiany w procesie, wprowadź plik wykonywalny lub plik skryptu albo plik, który można otworzyć przy użyciu programu na komputerze. Jeśli określisz plik nie wykonywalny, Start-Process uruchomi program skojarzony z plikiem, podobnie jak w przypadku Invoke-Item polecenia cmdlet .

Możesz użyć parametrów Start-Process , aby określić opcje, takie jak ładowanie profilu użytkownika, uruchamianie procesu w nowym oknie lub używanie alternatywnych poświadczeń.

Przykłady

Przykład 1. Uruchamianie procesu, który używa wartości domyślnych

W tym przykładzie jest uruchamiany proces, który używa Sort.exe pliku w bieżącym folderze. Polecenie używa wszystkich wartości domyślnych, w tym domyślnego stylu okna, folderu roboczego i poświadczeń.

Start-Process -FilePath "sort.exe"

Przykład 2. Drukowanie pliku tekstowego

W tym przykładzie rozpoczyna się proces, który drukuje C:\PS-Test\MyFile.txt plik.

Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print

Przykład 3. Uruchamianie procesu sortowania elementów do nowego pliku

W tym przykładzie rozpoczyna się proces sortowania elementów w TestSort.txt pliku i zwraca posortowane elementy w plikach Sorted.txt . Wszelkie błędy są zapisywane w SortError.txt pliku. Parametr UseNewEnvironment określa, że proces jest uruchamiany z własnymi zmiennymi środowiskowymi.

$processOptions = @{
    FilePath = "sort.exe"
    RedirectStandardInput = "TestSort.txt"
    RedirectStandardOutput = "Sorted.txt"
    RedirectStandardError = "SortError.txt"
    UseNewEnvironment = $true
}
Start-Process @processOptions

W tym przykładzie do przekazania parametrów do polecenia cmdlet użyto narzędzia splatting. Aby uzyskać więcej informacji, zobacz about_Splatting.

Przykład 4. Uruchamianie procesu w zmaksymalizowanym oknie

W tym przykładzie rozpoczyna się Notepad.exe proces. Maksymalizuje okno i zachowuje okno do momentu zakończenia procesu.

Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized

Przykład 5. Uruchamianie programu PowerShell jako administrator

W tym przykładzie program PowerShell jest uruchamiany przy użyciu opcji Uruchom jako administrator .

Start-Process -FilePath "powershell" -Verb RunAs

Przykład 6. Uruchamianie procesu przy użyciu różnych czasowników

W tym przykładzie pokazano, jak znaleźć czasowniki, które mogą być używane podczas uruchamiania procesu. Dostępne czasowniki są określane przez rozszerzenie nazwy pliku, który jest uruchamiany w procesie.

$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args powershell.exe
$startExe.verbs

open
runas
runasuser

W tym przykładzie użyto New-Object metody do utworzenia obiektu System.Diagnostics.ProcessStartInfo dla powershell.exepliku, który jest uruchamiany w procesie programu PowerShell. Właściwość Verbs obiektu ProcessStartInfo pokazuje, że można użyć czasowników Open i RunAs z elementami powershell.exelub z dowolnym procesem .exe , który uruchamia plik.

Przykład 7: Określanie argumentów procesu

Oba polecenia uruchamiają interpreter poleceń systemu Windows, wydając dir polecenie w folderze Program Files . Ponieważ ta nazwa folderu zawiera spację, wartość musi być otoczona cudzysłowami ucieczki. Należy pamiętać, że pierwsze polecenie określa ciąg jako ArgumentList. Drugie polecenie to tablica ciągów.

Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%SystemDrive%\Program Files`""
Start-Process -FilePath "$env:comspec" -ArgumentList "/c","dir","`"%SystemDrive%\Program Files`""

Przykład 8. Uruchamianie polecenia jako administrator przy użyciu poświadczeń alternatywnych

W systemie Windows można uruchomić polecenie Start-Process -Verb RunAs , aby rozpocząć proces z podwyższonym poziomem uprawnień. Spowoduje to podniesienie poziomu kontekstu bieżącego użytkownika. Parametr Credential umożliwia określenie alternatywnej nazwy użytkownika i hasła, co umożliwia rozpoczęcie procesu w innej zawartości użytkownika. Nie można jednak używać jednocześnie parametrów Credential i Verb .

Aby rozpocząć proces z podwyższonym poziomem uprawnień, używając poświadczeń alternatywnych, należy najpierw uruchomić program PowerShell przy użyciu alternatywnych poświadczeń, a następnie użyć polecenia Start-Process , aby rozpocząć proces z podwyższonym poziomem uprawnień.

$cred = Get-Credential
$args = '-noprofile -command "Start-Process cmd.exe -Verb RunAs -args /k"'
Start-Process pwsh.exe -Credential $cred -WindowStyle Hidden -ArgumentList $args

Przykład rozpoczyna się od cmd.exe podniesionych uprawnień z sesji programu PowerShell, która jest uruchomiona w ramach alternatywnych poświadczeń.

Przykład 9: Tworzenie procesu odłączonego w systemie Linux

W systemie Windows Start-Process program tworzy niezależny proces, który pozostaje uruchomiony niezależnie od powłoki uruchamiania. Na platformach innych niż Windows nowo uruchomiony proces jest dołączony do uruchomionej powłoki. Jeśli powłoka uruchamiania zostanie zamknięta, proces podrzędny zostanie zakończony.

Aby uniknąć zakończenia procesu podrzędnego na platformach przypominających system Unix, można połączyć z programem Start-Processnohup. Poniższy przykład uruchamia wystąpienie programu PowerShell w tle w systemie Linux, które pozostaje aktywne nawet po zamknięciu sesji uruchamiania. Polecenie nohup zbiera dane wyjściowe w pliku nohup.out w bieżącym katalogu.

# Runs for 2 minutes and appends output to ./nohup.out
Start-Process nohup 'pwsh -noprofile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'

W tym przykładzie Start-Process jest uruchomione polecenie systemu Linux nohup , które jest uruchamiane pwsh jako proces odłączony. Aby uzyskać więcej informacji, zobacz stronę człowieka dla nohup.

Parametry

-ArgumentList

Określa parametry lub wartości parametrów, które mają być używane podczas uruchamiania procesu tego polecenia cmdlet. Argumenty mogą być akceptowane jako pojedynczy ciąg z argumentami rozdzielonymi spacjami lub jako tablica ciągów rozdzielonych przecinkami. Polecenie cmdlet łączy tablicę w jeden ciąg z każdym elementem tablicy oddzielonym pojedynczą spacją.

Cudzysłowy zewnętrzne ciągów programu PowerShell nie są uwzględniane, gdy wartości ArgumentList są przekazywane do nowego procesu. Jeśli parametry lub wartości parametrów zawierają spację lub cudzysłowy, muszą być otoczone znakiem ucieczki podwójny cudzysłowów. Aby uzyskać więcej informacji, zobacz about_Quoting_Rules.

Aby uzyskać najlepsze wyniki, użyj pojedynczej wartości ArgumentList zawierającej wszystkie argumenty i wszystkie wymagane znaki cudzysłowu.

Type:String[]
Aliases:Args
Position:1
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Monituje o potwierdzenie przed uruchomieniem polecenia cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Określa konto użytkownika, które ma uprawnienia do wykonania tej akcji. Domyślnie polecenie cmdlet używa poświadczeń bieżącego użytkownika.

Wpisz nazwę użytkownika, taką jak User01 lub Domain01\User01, lub wprowadź obiekt PSCredential wygenerowany przez Get-Credential polecenie cmdlet. Jeśli wpiszesz nazwę użytkownika, zostanie wyświetlony monit o wprowadzenie hasła.

Poświadczenia są przechowywane w obiekcie PSCredential , a hasło jest przechowywane jako secureString.

Uwaga

Aby uzyskać więcej informacji na temat ochrony danych za pomocą protokołu SecureString , zobacz Jak bezpieczny jest protokół SecureString?.

Type:PSCredential
Aliases:RunAs
Position:Named
Default value:Current user
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

Określa opcjonalną ścieżkę i nazwę pliku programu uruchamianego w procesie. Wprowadź nazwę pliku wykonywalnego lub dokumentu, takiego jak .txt plik lub .doc skojarzony z programem na komputerze. Ten parametr jest wymagany.

Jeśli określisz tylko nazwę pliku, użyj parametru WorkingDirectory , aby określić ścieżkę.

Type:String
Aliases:PSPath, Path
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-LoadUserProfile

Wskazuje, że to polecenie cmdlet ładuje profil użytkownika systemu Windows przechowywany w kluczu HKEY_USERS rejestru dla bieżącego użytkownika. Parametr nie ma zastosowania do systemów innych niż Windows.

Ten parametr nie ma wpływu na profile programu PowerShell. Aby uzyskać więcej informacji, zobacz about_Profiles.

Type:SwitchParameter
Aliases:Lup
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-NoNewWindow

Uruchom nowy proces w bieżącym oknie konsoli. Domyślnie w systemie Windows program PowerShell otwiera nowe okno. W systemach innych niż Windows nigdy nie otrzymujesz nowego okna.

Nie można użyć parametrów NoNewWindow i WindowStyle w tym samym poleceniu.

Parametr nie ma zastosowania do systemów innych niż Windows.

Type:SwitchParameter
Aliases:nnw
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

Zwraca obiekt procesu dla każdego procesu, który został uruchomiony przez polecenie cmdlet. Domyślnie to polecenie cmdlet nie generuje żadnych danych wyjściowych.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-RedirectStandardError

Określa plik. To polecenie cmdlet wysyła wszelkie błędy wygenerowane przez proces do określonego pliku. Wprowadź ścieżkę i nazwę pliku. Domyślnie błędy są wyświetlane w konsoli programu .

Type:String
Aliases:RSE
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-RedirectStandardInput

Określa plik. To polecenie cmdlet odczytuje dane wejściowe z określonego pliku. Wprowadź ścieżkę i nazwę pliku wejściowego. Domyślnie proces pobiera dane wejściowe z klawiatury.

Type:String
Aliases:RSI
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-RedirectStandardOutput

Określa plik. To polecenie cmdlet wysyła dane wyjściowe wygenerowane przez proces do określonego pliku. Wprowadź ścieżkę i nazwę pliku. Domyślnie dane wyjściowe są wyświetlane w konsoli programu .

Type:String
Aliases:RSO
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-UseNewEnvironment

Wskazuje, że to polecenie cmdlet używa nowych zmiennych środowiskowych określonych dla procesu. Domyślnie rozpoczęty proces jest uruchamiany ze zmiennymi środowiskowymi dziedziczone z procesu nadrzędnego.

W systemie Windows, gdy używasz polecenia UseNewEnvironment, nowy proces rozpoczyna się tylko z domyślnymi zmiennymi środowiskowymi zdefiniowanymi dla zakresu komputera . Ma to efekt uboczny, który $env:USERNAME jest ustawiony na SYSTEM. Żadna ze zmiennych z zakresu użytkownika nie jest uwzględniona.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-Verb

Określa czasownik, który ma być używany, gdy to polecenie cmdlet uruchamia proces. Dostępne czasowniki są określane przez rozszerzenie nazwy pliku uruchamianego w procesie.

W poniższej tabeli przedstawiono czasowniki dla niektórych typowych typów plików procesu.

Typ pliku zlecenia
cmd Edytuj, Otwórz, Drukuj, Uruchom jako, RunAsUser
.exe Open, RunAs, RunAsUser
txt Otwórz, Drukuj, Drukuj
wav Otwórz, odtwórz

Aby znaleźć czasowniki, które mogą być używane z plikiem uruchomionym w procesie, użyj New-Object polecenia cmdlet , aby utworzyć obiekt System.Diagnostics.ProcessStartInfo dla pliku. Dostępne czasowniki znajdują się we właściwości Verbs obiektu ProcessStartInfo . Aby uzyskać szczegółowe informacje, zobacz przykłady.

Parametr nie ma zastosowania do systemów innych niż Windows.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-Wait

Wskazuje, że to polecenie cmdlet czeka na ukończenie określonego procesu i jego elementów podrzędnych przed zaakceptowaniem większej liczby danych wejściowych. Ten parametr pomija wiersz polecenia lub zachowuje okno do momentu zakończenia procesów.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Pokazuje, co się stanie po uruchomieniu polecenia cmdlet. Polecenie cmdlet nie jest uruchamiane.

Ten parametr został wprowadzony w programie PowerShell 6.0.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-WindowStyle

Określa stan okna używanego dla nowego procesu. Wartość domyślna to Normal. Dopuszczalne wartości dla tego parametru to:

  • Normal
  • Hidden
  • Minimized
  • Maximized

Nie można użyć parametrów WindowStyle i NoNewWindow w tym samym poleceniu.

Parametr nie ma zastosowania do systemów innych niż Windows. W przypadku używania w systemach innych niż Windows nigdy nie otrzymujesz nowego okna.

Type:ProcessWindowStyle
Accepted values:Normal, Hidden, Minimized, Maximized
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-WorkingDirectory

Określa lokalizację, w którą powinien rozpocząć się nowy proces. Wartość domyślna to lokalizacja uruchamianego pliku wykonywalnego lub dokumentu. Symbole wieloznaczne nie są obsługiwane. Ścieżka nie może zawierać znaków, które byłyby interpretowane jako symbole wieloznaczne.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

Dane wejściowe

None

Nie można przekazać danych wejściowych potoku do tego polecenia cmdlet.

Dane wyjściowe

None, System.Diagnostics.Process

To polecenie cmdlet generuje obiekt System.Diagnostics.Process , jeśli określisz parametr PassThru . W przeciwnym razie to polecenie cmdlet nie zwraca żadnych danych wyjściowych.

Uwagi

Program PowerShell zawiera następujące aliasy dla Start-Processprogramu :

  • Wszystkie platformy
    • saps
  • Windows
    • start

Polecenia natywne to pliki wykonywalne zainstalowane w systemie operacyjnym. Te pliki wykonywalne można uruchamiać z poziomu dowolnej powłoki wiersza polecenia, takiej jak program PowerShell. Zwykle polecenie jest uruchamiane dokładnie tak, jak w bash elemecie lub cmd.exe. Polecenie Start-Process cmdlet może służyć do uruchamiania dowolnych natywnych poleceń, ale powinno być używane tylko wtedy, gdy trzeba kontrolować sposób wykonywania polecenia.

Start-Process Jest przydatny w przypadku uruchamiania programów z graficznym interfejsem użytkownika na platformach innych niż Windows. Na przykład uruchom polecenie Start-Proces gedit , aby uruchomić graficzny edytor tekstów wspólne dla środowisk pulpitu GNOM.

Domyślnie Start-Process program uruchamia proces asynchronicznie. Kontrolka jest natychmiast zwracana do programu PowerShell, nawet jeśli nowy proces jest nadal uruchomiony.

  • W systemie lokalnym uruchomiony proces jest uruchamiany niezależnie od procesu wywoływania.
  • W systemie zdalnym nowy proces zostaje zakończony po zakończeniu sesji zdalnej, bezpośrednio po wykonaniu Start-Process polecenia . W związku z tym nie można używać Start-Process w sesji zdalnej, która oczekuje, że uruchomiony proces przetrwa sesję.

Jeśli musisz użyć Start-Process w sesji zdalnej, wywołaj ją za pomocą parametru Wait . Można też użyć innych metod do utworzenia nowego procesu w systemie zdalnym.

W przypadku korzystania z parametru Start-ProcessWait czeka na zakończenie drzewa procesów (procesu i wszystkich jego elementów podrzędnych) przed zwróceniem kontrolki. Różni się to od zachowania Wait-Process polecenia cmdlet, które oczekuje tylko na zakończenie określonych procesów.

W systemie Windows najczęstszym przypadkiem Start-Process użycia jest użycie parametru Wait w celu zablokowania postępu do momentu zakończenia nowego procesu. W systemie spoza systemu Windows jest to rzadko potrzebne, ponieważ domyślne zachowanie aplikacji wiersza polecenia jest równoważne .Start-Process -Wait

To polecenie cmdlet jest implementowane przy użyciu metody Start klasy System.Diagnostics.Process . Aby uzyskać więcej informacji na temat tej metody, zobacz Process.Start Method (Metoda Process.Start).