Udostępnij przez


Start-Process

Uruchamia co najmniej jeden proces na komputerze lokalnym.

Składnia

Default (domyślnie)

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>]

UseShellExecute

Start-Process
    [-FilePath] <String>
    [[-ArgumentList] <String[]>]
    [-WorkingDirectory <String>]
    [-PassThru]
    [-Verb <String>]
    [-WindowStyle <ProcessWindowStyle>]
    [-Wait]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Opis

Polecenie cmdlet Start-Process 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 polecenie cmdlet Invoke-Item.

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 poświadczeń alternatywnych.

Przykłady

Przykład 1. Uruchamianie procesu używającego wartości domyślnych

W tym przykładzie rozpoczyna się proces, który używa pliku Sort.exe 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 plik C:\PS-Test\MyFile.txt.

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 pliku Testsort.txt i zwraca posortowane elementy w plikach Sorted.txt. Wszelkie błędy są zapisywane w pliku SortError.txt. 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, aby przekazać parametry 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ę proces Notepad.exe. 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 do utworzenia obiektu System.Diagnostics.ProcessStartInfo dla PowerShell.exe, pliku uruchamianego w procesie programu PowerShell. Właściwość Verbs obiektu ProcessStartInfo pokazuje, że czasowników Open i RunAs można używać z PowerShell.exeprogramem 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 polecenie dir 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. Tworzenie procesu odłączonego w systemie Linux

W systemie Windows Start-Process 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żesz połączyć Start-Process z nohup. Poniższy przykład uruchamia w tle wystąpienie programu PowerShell 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 uruchamia polecenie nohup systemu Linux, które uruchamia pwsh jako proces odłączony. Aby uzyskać więcej informacji, zobacz stronę podręcznika systemowego dla nohup.

Parametry

-ArgumentList

Określa parametry lub wartości parametrów do użycia podczas uruchamiania tego polecenia cmdlet. Argumenty mogą być akceptowane jako pojedynczy ciąg z argumentami oddzielonymi spacjami lub jako tablica ciągów oddzielonych 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łów, muszą być otoczone znakiem ucieczki podwójnych cudzysłowów. Aby uzyskać więcej informacji, zobacz about_Quoting_Rules.

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

Właściwości parametru

Typ:

String[]

Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:Argumenty

Zestawy parametrów

(All)
Position:1
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów:False

-Confirm

Prosi o potwierdzenie przed uruchomieniem cmdletu.

Właściwości parametru

Typ:SwitchParameter
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:por

Zestawy parametrów

(All)
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów: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 polecenie cmdlet Get-Credential. 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 / Notatka

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

Właściwości parametru

Typ:PSCredential
Domyślna wartość:Current user
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:Uruchom jako

Zestawy parametrów

Default
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów: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ę.

Właściwości parametru

Typ:String
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:PSPath, Ścieżka

Zestawy parametrów

(All)
Position:0
Obowiązkowe:True
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów:False

-LoadUserProfile

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

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

Właściwości parametru

Typ:SwitchParameter
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:Lupa

Zestawy parametrów

Default
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów: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 w przypadku systemów innych niż Windows.

Właściwości parametru

Typ:SwitchParameter
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:Nnw

Zestawy parametrów

Default
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów: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.

Właściwości parametru

Typ:SwitchParameter
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False

Zestawy parametrów

(All)
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów: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 .

Właściwości parametru

Typ:String
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:RSE

Zestawy parametrów

Default
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów: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.

Właściwości parametru

Typ:String
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:RSI

Zestawy parametrów

Default
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów: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 .

Właściwości parametru

Typ:String
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:RSO

Zestawy parametrów

Default
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów: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 dziedziczone z procesu nadrzędnego.

W systemie Windows podczas korzystania z UseNewEnvironmentnowy proces rozpoczyna się tylko z domyślnymi zmiennymi środowiskowymi zdefiniowanymi dla zakresu Machine. Ma to wpływ na to, że jest ustawiony na $env:USERNAMESYSTEM. Żaden ze zmiennych z zakresu User nie jest uwzględniony.

Właściwości parametru

Typ:SwitchParameter
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False

Zestawy parametrów

Default
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów: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, który jest uruchamiany w procesie.

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

Typ pliku czasowniki
.cmd Edytuj, Otwórz, Drukuj, Uruchom jako, Uruchom jako Użytkownik
.exe Otwórz, Uruchom jako, Uruchom jako użytkownika
.txt Otwórz, drukuj, Drukuj
.wav Otwórz, odtwórz

Aby znaleźć czasowniki, których można używać z plikiem uruchomionym w procesie, użyj polecenia cmdlet New-Object, aby utworzyć obiekt System.Diagnostics.ProcessStartInfo 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 w przypadku systemów innych niż Windows.

Właściwości parametru

Typ:String
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False

Zestawy parametrów

UseShellExecute
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów:False

-Wait

Wskazuje, że to polecenie cmdlet oczekuje 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.

Właściwości parametru

Typ:SwitchParameter
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False

Zestawy parametrów

(All)
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów:False

-WhatIf

Pokazuje, co się stanie, jeśli polecenie cmdlet zostanie uruchomione. Cmdlet nie jest uruchomiony.

Ten parametr został wprowadzony w programie PowerShell 6.0.

Właściwości parametru

Typ:SwitchParameter
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False
Aliasy:Wi

Zestawy parametrów

(All)
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów:False

-WindowStyle

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

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

Parametr nie ma zastosowania w przypadku systemów innych niż Windows. W przypadku korzystania z systemów innych niż Windows nigdy nie otrzymujesz nowego okna.

Właściwości parametru

Typ:ProcessWindowStyle
Domyślna wartość:None
Dopuszczalne wartości:Normal, Hidden, Minimized, Maximized
Obsługuje symbole wieloznaczne:False
DontShow:False

Zestawy parametrów

(All)
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów:False

-WorkingDirectory

Określa lokalizację, w którą powinien zostać uruchomiony nowy proces. Wartość domyślna to lokalizacja uruchamianego pliku wykonywalnego lub dokumentu. Symbole wieloznaczne nie są obsługiwane. Nazwa ścieżki nie może zawierać znaków, które mogłyby zostać zinterpretowane jako symbole wieloznaczne.

Właściwości parametru

Typ:String
Domyślna wartość:None
Obsługuje symbole wieloznaczne:False
DontShow:False

Zestawy parametrów

(All)
Position:Named
Obowiązkowe:False
Wartość z potoku:False
Wartość z potoku według nazwy właściwości:False
Wartość z pozostałych argumentów:False

CommonParameters

To polecenie cmdlet obsługuje typowe parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction i -WarningVariable. Aby uzyskać więcej informacji, zobacz about_CommonParameters.

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

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 jest przerywany po zakończeniu sesji zdalnej bezpośrednio po Start-Process polecenia. W związku z tym nie można używać Start-Process w sesji zdalnej, oczekując, że uruchomiony proces przetrwa sesję.

Jeśli musisz użyć Start-Process w sesji zdalnej, wywołaj ją przy użyciu parametru Wait. Możesz też użyć innych metod, aby utworzyć nowy proces w systemie zdalnym.

W przypadku używania parametru WaitStart-Process czeka na drzewo procesów (proces i wszystkie jego elementy potomne), aby zakończyć działanie przed zwróceniem kontrolki. Różni się to od zachowania polecenia cmdlet Wait-Process, które oczekuje tylko na zakończenie określonych procesów.

W systemie Windows najczęstszym przypadkiem użycia Start-Process jest użycie parametru Wait w celu zablokowania postępu do czasu 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.