Start-Process

Spustí jeden nebo více procesů v místním počítači.

Syntax

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

Description

Rutina Start-Process spustí jeden nebo více procesů v místním počítači. Ve výchozím nastavení vytvoří nový proces, Start-Process který dědí všechny proměnné prostředí definované v aktuálním procesu.

Chcete-li určit program, který se spouští v procesu, zadejte spustitelný soubor nebo soubor skriptu nebo soubor, který lze otevřít pomocí programu v počítači. Pokud zadáte nespustitelný soubor, Start-Process spustí program přidružený k souboru, podobně jako rutina Invoke-Item .

Parametry Start-Process můžete použít k určení možností, jako je načtení profilu uživatele, spuštění procesu v novém okně nebo použití alternativních přihlašovacích údajů.

Příklady

Příklad 1: Spuštění procesu, který používá výchozí hodnoty

Tento příklad spustí proces, který používá Sort.exe soubor v aktuální složce. Příkaz používá všechny výchozí hodnoty, včetně výchozího stylu okna, pracovní složky a přihlašovacích údajů.

Start-Process -FilePath "sort.exe"

Příklad 2: Tisk textového souboru

Tento příklad spustí proces, který soubor vytiskne C:\PS-Test\MyFile.txt .

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

Příklad 3: Zahájení procesu řazení položek do nového souboru

Tento příklad spustí proces, který seřadí položky v TestSort.txt souboru a vrátí seřazené položky v souborech Sorted.txt . Všechny chyby se zapisují do SortError.txt souboru. Parametr UseNewEnvironment určuje, že proces běží s vlastními proměnnými prostředí.

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

Tento příklad používá k předání parametrů rutině splatting. Další informace najdete v tématu about_Splatting.

Příklad 4: Spuštění procesu v maximalizovaném okně

Tento příklad spustí Notepad.exe proces. Maximalizuje okno a zachová okno, dokud se proces dokončí.

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

Příklad 5: Spuštění PowerShellu jako správce

Tento příklad spustí PowerShell pomocí možnosti Spustit jako správce .

Start-Process -FilePath "powershell" -Verb RunAs

Příklad 6: Spuštění procesu pomocí různých sloves

Tento příklad ukazuje, jak najít příkazy, které lze použít při spuštění procesu. Dostupné příkazy jsou určeny příponou názvu souboru, který běží v procesu.

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

open
runas
runasuser

Příklad používá New-Object k vytvoření objektu System.Diagnostics.ProcessStartInfo pro powershell.exesoubor, který běží v procesu PowerShellu. Příkazy vlastnost ProcessStartInfo objektu ukazuje, že můžete použít Open a RunAs slovesa s powershell.exe, nebo s jakýmkoli procesem, který spouští .exe soubor.

Příklad 7: Zadání argumentů procesu

Oba příkazy spustí interpret příkazu windows, který dir vydá příkaz ve Program Files složce. Vzhledem k tomu, že tento název složky obsahuje mezeru, musí být hodnota obklopena řídicími uvozovkami. Všimněte si, že první příkaz určuje řetězec jako ArgumentList. Druhým příkazem je pole řetězců.

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

Příklad 8: Spuštění příkazu jako správce pomocí alternativních přihlašovacích údajů

Ve Windows můžete Start-Process -Verb RunAs spustit proces se zvýšenými oprávněními. Tím se zvýší kontext aktuálního uživatele. Parametr Credential umožňuje zadat alternativní uživatelské jméno a heslo, což vám umožní zahájit proces v jiném uživatelském obsahu. Parametry přihlašovacích údajů a sloves se ale nedají použít společně.

Pokud chcete zahájit proces se zvýšenými oprávněními pomocí alternativních přihlašovacích údajů, musíte nejprve spustit PowerShell pomocí alternativních přihlašovacích údajů a pak Start-Process spustit proces se zvýšenými oprávněními.

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

Tento příklad začíná cmd.exe zvýšenými oprávněními z relace PowerShellu, která běží pod alternativními přihlašovacími údaji.

Příklad 9: Vytvoření odpojeného procesu v Linuxu

Ve Windows vytvoří nezávislý proces, Start-Process který zůstane spuštěn nezávisle na spouštěcím prostředí. Na jiných platformách než Windows je nově spuštěný proces připojený k prostředí, které se spustilo. Pokud je spouštěcí prostředí zavřené, podřízený proces se ukončí.

Chcete-li zabránit ukončení podřízeného procesu na platformách podobných unixovým systémům, můžete kombinovat Start-Process s nohup. Následující příklad spustí instanci PowerShellu na pozadí v Linuxu, která zůstane aktivní i po zavření relace spuštění. Příkaz nohup shromažďuje výstup v souboru nohup.out v aktuálním adresáři.

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

V tomto příkladu běží příkaz Linuxunohup, Start-Process který se spustí pwsh jako odpojený proces. Další informace najdete na stránce man pro nohup.

Parametry

-ArgumentList

Určuje parametry nebo hodnoty parametrů, které se mají použít při spuštění této rutiny. Argumenty lze přijmout jako jeden řetězec s argumenty oddělenými mezerami nebo jako pole řetězců oddělených čárkami. Rutina spojí pole do jednoho řetězce s každým prvkem pole odděleným jedním mezerou.

Vnější uvozovky řetězců PowerShellu nejsou zahrnuty, pokud jsou hodnoty ArgumentList předány novému procesu. Pokud parametry nebo hodnoty parametrů obsahují mezeru nebo uvozovky, musí být ohraničeny řídicími dvojitými uvozovkami. Další informace najdete v tématu about_Quoting_Rules.

Nejlepších výsledků dosáhnete tak, že použijete jednu hodnotu ArgumentList obsahující všechny argumenty a všechny potřebné znaky uvozovek.

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

-Confirm

Před spuštěním rutiny zobrazí výzvu k potvrzení.

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

-Credential

Určuje uživatelský účet, který má oprávnění k provedení této akce. Ve výchozím nastavení rutina používá přihlašovací údaje aktuálního uživatele.

Zadejte uživatelské jméno, například User01 nebo Domain01\User01, nebo zadejte objekt PSCredential vygenerovaný rutinou Get-Credential . Pokud zadáte uživatelské jméno, zobrazí se výzva k zadání hesla.

Přihlašovací údaje jsou uloženy v objektu PSCredential a heslo je uloženo jako SecureString.

Poznámka

Další informace o ochraně dat SecureString naleznete v tématu Jak zabezpečený je SecureString?.

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

-FilePath

Určuje volitelnou cestu a název souboru programu, který se spouští v procesu. Zadejte název spustitelného souboru nebo dokumentu, například .txt souboru nebo .doc souboru, který je přidružený k programu v počítači. Tento parametr je povinný.

Pokud zadáte pouze název souboru, zadejte cestu pomocí parametru WorkingDirectory .

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

-LoadUserProfile

Označuje, že tato rutina načte profil uživatele Systému Windows uložený v HKEY_USERS klíči registru pro aktuálního uživatele. Parametr se nevztahuje na systémy bez Windows.

Tento parametr nemá vliv na profily PowerShellu. Další informace najdete v tématu about_Profiles.

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

-NoNewWindow

Spusťte nový proces v aktuálním okně konzoly. Ve výchozím nastavení ve Windows PowerShell otevře nové okno. V systémech bez Windows nikdy nedostanete nové okno.

Parametry NoNewWindow a WindowStyle nemůžete použít ve stejném příkazu.

Parametr se nevztahuje na systémy bez Windows.

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

-PassThru

Vrátí objekt procesu pro každý proces, který rutina spustila. Ve výchozím nastavení tato rutina negeneruje žádný výstup.

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

-RedirectStandardError

Určuje soubor. Tato rutina odesílá všechny chyby generované procesem do zadaného souboru. Zadejte cestu a název souboru. Ve výchozím nastavení se chyby zobrazují v konzole.

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

-RedirectStandardInput

Určuje soubor. Tato rutina čte vstup ze zadaného souboru. Zadejte cestu a název souboru vstupního souboru. Ve výchozím nastavení proces získá svůj vstup z klávesnice.

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

-RedirectStandardOutput

Určuje soubor. Tato rutina odešle výstup vygenerovaný procesem do zadaného souboru. Zadejte cestu a název souboru. Ve výchozím nastavení se výstup zobrazí v konzole.

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

-UseNewEnvironment

Označuje, že tato rutina používá nové proměnné prostředí zadané pro proces. Ve výchozím nastavení se spuštěný proces spustí s proměnnými prostředí zděděnými z nadřazeného procesu.

Když ve Windows použijete UseNewEnvironment, spustí se nový proces pouze obsahující výchozí proměnné prostředí definované pro obor počítače . To má vedlejší účinek, který $env:USERNAME je nastaven na SYSTEM. Nejsou zahrnuty žádné proměnné z oboru uživatele .

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

-Verb

Určuje příkaz, který se má použít při spuštění tohoto procesu. Příkazy, které jsou k dispozici, jsou určeny příponou názvu souboru, která se spouští v procesu.

Následující tabulka uvádí příkazy pro některé běžné typy souborů procesu.

Typ souboru Příkazy
.cmd Edit, Open, Print, RunAs, RunAsUser
.exe Open, RunAs, RunAsUser
.txt Otevření, tisk, tisk
Wav Otevřít, Přehrát

Chcete-li najít příkazy, které lze použít se souborem, který běží v procesu, použijte rutinu New-Object k vytvoření objektu System.Diagnostics.ProcessStartInfo pro soubor. Dostupné příkazy jsou ve slovesech vlastnost ProcessStartInfo objektu. Podrobnosti najdete v příkladech.

Parametr se nevztahuje na systémy bez Windows.

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

-Wait

Označuje, že tato rutina čeká na dokončení zadaného procesu a jeho potomků před přijetím dalšího vstupu. Tento parametr potlačí příkazový řádek nebo zachová okno, dokud procesy nedokončí.

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

-WhatIf

Zobrazuje, co by se stalo při spuštění rutiny. Rutina se nespustí.

Tento parametr byl zaveden v PowerShellu 6.0.

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

-WindowStyle

Určuje stav okna, které se používá pro nový proces. Výchozí hodnota je Normal. Tento parametr přijímá tyto hodnoty:

  • Normal
  • Hidden
  • Minimized
  • Maximized

Parametry WindowStyle a NoNewWindow nemůžete použít ve stejném příkazu.

Parametr se nevztahuje na systémy bez Windows. Pokud používáte jiné systémy než Windows, nikdy nedostanete nové okno.

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

-WorkingDirectory

Určuje umístění, ve které má nový proces začít. Výchozí nastavení je umístění spustitelného souboru nebo dokumentu, který se spouští. Zástupné cardy nejsou podporované. Cesta nesmí obsahovat znaky, které by byly interpretovány jako zástupné znaky.

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

Vstupy

None

Vstup do této rutiny nelze roušit.

Výstupy

None, System.Diagnostics.Process

Tato rutina vygeneruje objekt System.Diagnostics.Process , pokud zadáte parametr PassThru . Jinak tato rutina nevrací žádný výstup.

Poznámky

PowerShell obsahuje následující aliasy pro Start-Process:

  • Všechny platformy
    • saps
  • Windows
    • start

Nativní příkazy jsou spustitelné soubory nainstalované v operačním systému. Tyto spustitelné soubory je možné spouštět z libovolného prostředí příkazového řádku, jako je PowerShell. Příkaz obvykle spouštíte přesně tak, jak jste v bash nebo cmd.exe. Rutinu Start-Process je možné použít ke spouštění nativních příkazů, ale měla by se použít pouze v případě, že potřebujete řídit způsob spuštění příkazu.

Start-Process je užitečný pro spouštění programů grafického uživatelského rozhraní na platformách jiných než Windows. Spusťte například spuštěním Start-Proces gedit grafického textového editoru běžné prostředí GNOME Desktop.

Ve výchozím nastavení Start-Process spustí proces asynchronně. Řízení se okamžitě vrátí do PowerShellu, i když je nový proces stále spuštěný.

  • V místním systému se spuštěný proces nachází nezávisle na volajícím procesu.
  • Ve vzdáleném systému se nový proces ukončí, když vzdálená relace skončí okamžitě za příkazem Start-Process . Proto nemůžete použít Start-Process ve vzdálené relaci, která očekává, že spuštěný proces přežije relaci.

Pokud potřebujete použít Start-Process ve vzdálené relaci, vyvolejte ji pomocí parametru Wait . Nebo můžete použít jiné metody k vytvoření nového procesu ve vzdáleném systému.

Při použití parametru Wait čeká Start-Process na ukončení stromu procesu (procesu a všech jeho potomků) před vrácením ovládacího prvku. Liší se od chování Wait-Process rutiny, která čeká pouze na ukončení zadaných procesů.

Nejběžnějším případem použití ve Start-Process Windows je použití parametru Wait k blokování průběhu, dokud se nový proces neskončí. V systému, který není windows, je to zřídka potřeba, protože výchozí chování pro aplikace příkazového řádku je ekvivalentní Start-Process -Wait.

Tato rutina se implementuje pomocí metody Start třídy System.Diagnostics.Process . Další informace o této metodě naleznete v tématu Process.Start – metoda.