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
uruchamia program skojarzony z plikiem, podobny do 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 zostanie uruchomiony proces, który drukuje C:\PS-Test\MyFile.txt
plik.
Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print
Przykład 3. Rozpoczęcie 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 użyto splattingu w celu przekazania parametrów do polecenia cmdlet. 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. Używanie różnych czasowników do rozpoczęcia procesu
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 przykładzie użyto New-Object
metody do utworzenia obiektu System.Diagnostics.ProcessStartInfo dla powershell.exe
programu , 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 poleceniami powershell.exe
lub 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: Twórca odłączony proces w systemie Linux
W systemie Windows tworzy niezależny proces, Start-Process
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żesz połączyć się z nohup
programem Start-Process
. 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 artykuł nohup na Wikipedii.
Parametry
-ArgumentList
Określa parametry lub wartości parametrów do użycia, gdy to polecenie cmdlet uruchamia proces. 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 oddzielonej 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 podwójnymi cudzysłowami. Aby uzyskać więcej informacji, zobacz about_Quoting_Rules.
Aby uzyskać najlepsze wyniki, użyj pojedynczej wartości ArgumentList zawierającej wszystkie argumenty i wszelkie wymagane znaki cudzysłowu.
Type: | String[] |
Aliases: | Args |
Position: | 1 |
Default value: | None |
Required: | False |
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 |
Required: | False |
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 secureString , zobacz Jak bezpieczny jest protokół SecureString?.
Type: | PSCredential |
Aliases: | RunAs |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Określa opcjonalną ścieżkę i nazwę pliku programu, który jest uruchamiany 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, która nie odpowiada poleceniu systemowemu, użyj parametru WorkingDirectory , aby określić ścieżkę.
Type: | String |
Aliases: | PSPath, Path |
Position: | 0 |
Default value: | None |
Required: | True |
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 |
Required: | False |
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 |
Required: | False |
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 |
Required: | False |
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 |
Required: | False |
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 |
Required: | False |
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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseNewEnvironment
Wskazuje, że to polecenie cmdlet używa nowych zmiennych środowiskowych określonych dla tego procesu. Domyślnie rozpoczęty proces jest uruchamiany ze zmiennymi środowiskowymi dziedziczynymi z procesu nadrzędnego.
W systemie Windows podczas korzystania z polecenia UseNewEnvironment nowy proces rozpoczyna się tylko z domyślnymi zmiennymi środowiskowymi zdefiniowanymi dla zakresu maszyny . Ma to efekt uboczny ustawiony $env:USERNAME
na SYSTEM. Nie są uwzględniane żadne zmienne z zakresu użytkownika .
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Verb
Określa czasownik, który ma być używany, gdy to polecenie cmdlet uruchamia proces. Czasowniki, które są dostępne, są określane przez rozszerzenie nazwy pliku, który jest uruchamiany w procesie.
W poniższej tabeli przedstawiono czasowniki niektórych typowych typów plików procesu.
Typ pliku | zlecenia |
---|---|
cmd | Edit , Open , Print , RunAs , RunAsUser |
.exe | Open , RunAs , RunAsUser |
txt | Open , Print , PrintTo |
wav | Open , Play |
Aby znaleźć czasowniki, których można użyć z plikiem uruchamianym 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 |
Required: | False |
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 |
Required: | False |
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 |
Required: | False |
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 korzystania z systemów innych niż Windows nigdy nie otrzymujesz nowego okna.
Type: | ProcessWindowStyle |
Accepted values: | Normal, Hidden, Minimized, Maximized |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WorkingDirectory
Określa lokalizację, w którą powinien zostać uruchomiony nowy proces.
Jeśli nie zostanie określony, polecenie cmdlet domyślnie jest domyślnie w pełni kwalifikowaną lokalizacją określoną w parametrze FilePath . Jeśli wartość parametru FilePath nie jest w pełni kwalifikowana, domyślnie jest to bieżący katalog roboczy procesu wywołującego.
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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Dane wejściowe
None
Nie można potokować obiektów do tego polecenia cmdlet.
Dane wyjściowe
None
Domyślnie to polecenie cmdlet nie zwraca żadnych danych wyjściowych.
Gdy używasz parametru PassThru , to polecenie cmdlet zwraca obiekt Process .
Uwagi
Program PowerShell zawiera następujące aliasy dla Start-Process
programu :
- Wszystkie platformy
saps
- Windows
start
Polecenia natywne to pliki wykonywalne zainstalowane w systemie operacyjnym. Te pliki wykonywalne można uruchamiać z dowolnej powłoki wiersza polecenia, takiej jak program PowerShell. Zwykle uruchamiasz polecenie dokładnie tak, jak w bash
pliku lub cmd.exe
. Polecenie Start-Process
cmdlet może służyć do uruchamiania dowolnych natywnych poleceń, ale należy ich używać tylko wtedy, gdy trzeba kontrolować sposób wykonywania polecenia.
Start-Process
jest przydatne 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 GNOME.
Domyślnie Start-Process
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 zostanie zakończony po zakończeniu sesji zdalnej natychmiast 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 przeżyje sesję.
Jeśli musisz użyć Start-Process
w sesji zdalnej, wywołaj ją za pomocą parametru Wait . Możesz też użyć innych metod, aby utworzyć nowy proces w systemie zdalnym.
W przypadku korzystania z parametru Start-Process
Wait przed zwróceniem kontrolki czeka na zamknięcie drzewa procesów (procesu i wszystkich jego elementów potomnych). 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ęściej używanym przypadkiem Start-Process
użycia jest użycie parametru Wait w celu zablokowania postępu aż do 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).