Sdílet prostřednictvím


Start-Job

Spustí úlohu PowerShellu na pozadí.

Syntaxe

Start-Job
     [-Name <String>]
     [-ScriptBlock] <ScriptBlock>
     [-Credential <PSCredential>]
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-DefinitionName] <String>
     [[-DefinitionPath] <String>]
     [[-Type] <String>]
     [-WorkingDirectory <String>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     [-FilePath] <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     -LiteralPath <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-WorkingDirectory <String>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]

Description

Rutina Start-Job spustí úlohu prostředí PowerShell na pozadí na místním počítači.

Úloha na pozadí PowerShellu spustí příkaz bez interakce s aktuální relací. Když spustíte úlohu na pozadí, objekt úlohy se vrátí okamžitě, i když dokončení úlohy trvá delší dobu. Během spuštění úlohy můžete pokračovat v práci v relaci bez přerušení.

Objekt úlohy obsahuje užitečné informace o úloze, ale neobsahuje výsledky úlohy. Po dokončení úlohy pomocí Receive-Job rutiny získejte výsledky úlohy. Další informace o úlohách na pozadí najdete v tématu about_Jobs.

Pokud chcete spustit úlohu na pozadí na vzdáleném počítači, použijte parametr AsJob , který je k dispozici v mnoha rutinách, nebo pomocí rutiny Invoke-Command spusťte Start-Job příkaz na vzdáleném počítači. Další informace najdete v tématu about_Remote_Jobs.

Počínaje PowerShellem 3.0 Start-Job můžete spustit instance vlastních typů úloh, jako jsou naplánované úlohy. Informace o tom, jak spouštět Start-Job úlohy s vlastními typy, najdete v dokumentech nápovědy pro funkci typu úlohy.

Počínaje PowerShellem 6.0 můžete začít s úlohami pomocí operátoru ampersand (&) na pozadí. Funkce operátoru pozadí je podobná Start-Job. Obě metody spuštění úlohy vytvoří objekt úlohy PSRemotingJob . Další informace o použití ampersandu (&) najdete v tématu about_Operators.

PowerShell 7 zavedl parametr WorkingDirectory , který určuje počáteční pracovní adresář úlohy na pozadí. Pokud parametr není zadaný, Start-Job ve výchozím nastavení se nastaví aktuální pracovní adresář volajícího, který úlohu spustil.

Poznámka:

Vytvoření úlohy Start-Job na pozadí mimo proces se nepodporuje ve scénáři, kdy je PowerShell hostovaný v jiných aplikacích, například v PowerShellu Azure Functions.

Je to záměrně, protože Start-Job závisí na pwsh tom, jestli má být spustitelný soubor dostupný $PSHOME , aby mohl spustit úlohu na pozadí mimo proces, ale když aplikace hostuje PowerShell, používá přímo balíčky Sady NuGet SDK PowerShellu a nedoručí pwsh se spolu.

Náhrada v tomto scénáři je Start-ThreadJob z modulu ThreadJob.

Příklady

Příklad 1: Spuštění úlohy na pozadí

Tento příklad spustí úlohu na pozadí, která běží na místním počítači.

Start-Job -ScriptBlock { Get-Process -Name pwsh }

Id  Name   PSJobTypeName   State     HasMoreData   Location    Command
--  ----   -------------   -----     -----------   --------    -------
1   Job1   BackgroundJob   Running   True          localhost   Get-Process -Name pwsh

Start-Jobpoužívá parametr ScriptBlock ke spuštění Get-Process jako úlohu na pozadí. Parametr Name určuje, jak najít procesy PowerShellu. pwsh Zobrazí se informace o úloze a PowerShell se vrátí k příkazovému řádku, zatímco úloha běží na pozadí.

Pokud chcete zobrazit výstup úlohy, použijte rutinu Receive-Job . Například Receive-Job -Id 1.

Příklad 2: Použití operátoru pozadí ke spuštění úlohy na pozadí

Tento příklad používá operátor na pozadí ampersand (&) ke spuštění úlohy na pozadí v místním počítači. Úloha získá stejný výsledek jako Start-Job v příkladu 1.

Get-Process -Name pwsh &

Id    Name   PSJobTypeName   State       HasMoreData     Location      Command
--    ----   -------------   -----       -----------     --------      -------
5     Job5   BackgroundJob   Running     True            localhost     Microsoft.PowerShell.Man...

Get-Processpoužívá parametr Name k určení procesů PowerShellu. pwsh Ampersand (&) spustí příkaz jako úlohu na pozadí. Zobrazí se informace o úloze a PowerShell se vrátí k příkazovému řádku, zatímco úloha běží na pozadí.

Pokud chcete zobrazit výstup úlohy, použijte rutinu Receive-Job . Například Receive-Job -Id 5.

Příklad 3: Spuštění úlohy pomocí příkazu Invoke-Command

Tento příklad spustí úlohu na více počítačích. Úloha se uloží do proměnné a spustí se pomocí názvu proměnné na příkazovém řádku PowerShellu.

$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
   Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob

Úloha, která používá Invoke-Command , se vytvoří a uloží do $jobWRM proměnné. Invoke-Command pomocí parametru ComputerName určí počítače, ve kterých se úloha spouští. Get-Content získá názvy serverů ze C:\Servers.txt souboru.

Parametr ScriptBlock určuje příkaz, který Get-Service získá službu WinRM . Parametr JobName určuje popisný název úlohy, WinRM. Parametr ThrottleLimit omezuje počet souběžných příkazů na 16. Parametr AsJob spustí úlohu na pozadí, která spustí příkaz na serverech.

Příklad 4: Získání informací o úloze

Tento příklad získá informace o úloze a zobrazí výsledky dokončené úlohy, která byla spuštěna v místním počítači.

$j = Start-Job -ScriptBlock { Get-WinEvent -Log System } -Credential Domain01\User01
$j | Select-Object -Property *

State         : Completed
HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : Get-WinEvent -Log System
JobStateInfo  : Completed
Finished      : System.Threading.ManualResetEvent
InstanceId    : 27ce3fd9-40ed-488a-99e5-679cd91b9dd3
Id            : 18
Name          : Job18
ChildJobs     : {Job19}
PSBeginTime   : 8/8/2019 14:41:57
PSEndTime     : 8/8/2019 14:42:07
PSJobTypeName : BackgroundJob
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
Information   : {}

Start-Jobpomocí parametru ScriptBlock spustí příkaz, který určuje Get-WinEvent získání systémového protokolu. Parametr Credential určuje uživatelský účet domény s oprávněním ke spuštění úlohy v počítači. Objekt úlohy je uložen v $j proměnné.

Objekt v $j proměnné se odešle do kanálu do Select-Object. Parametr Property určuje hvězdičku (*) pro zobrazení všech vlastností objektu úlohy.

Příklad 5: Spuštění skriptu jako úlohy na pozadí

V tomto příkladu se skript na místním počítači spustí jako úloha na pozadí.

Start-Job -FilePath C:\Scripts\Sample.ps1

Start-Jobpoužívá parametr FilePath k určení souboru skriptu, který je uložen v místním počítači.

Příklad 6: Získání procesu pomocí úlohy na pozadí

Tento příklad používá úlohu na pozadí k získání zadaného procesu podle názvu.

Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }

Start-Job pomocí parametru Name určuje popisný název úlohy PShellJob. Parametr ScriptBlock určuje Get-Process , že se mají procesy načíst s názvem PowerShellu.

Příklad 7: Shromažďování a ukládání dat pomocí úlohy na pozadí

Tento příklad spustí úlohu, která shromažďuje velké množství mapových dat a pak je uloží do .tif souboru.

Start-Job -Name GetMappingFiles -InitializationScript {Import-Module -Name MapFunctions} -ScriptBlock {
   Get-Map -Name * | Set-Content -Path D:\Maps.tif }

Start-Jobpoužívá parametr Name k zadání popisného názvu úlohy GetMappingFiles. Parametr InitializationScript spustí blok skriptu, který importuje modul MapFunctions . Parametr ScriptBlock se spustí Get-Map a Set-Content uloží data do umístění určeného parametrem Path .

Příklad 8: Předání vstupu do úlohy na pozadí

Tento příklad používá automatickou $input proměnnou ke zpracování vstupního objektu. Slouží Receive-Job k zobrazení výstupu úlohy.

Start-Job -ScriptBlock { Get-Content -Path $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep

Server01
Server02
Server03
Server04

Start-Job používá parametr ScriptBlock ke spuštění Get-Content s automatickou proměnnou $input . Proměnná $input získá objekty z InputObject parametru. Receive-Jobpoužije parametr Name k určení úlohy a výstupu výsledků. Parametr Keep uloží výstup úlohy, aby ho bylo možné znovu zobrazit během relace PowerShellu.

Příklad 9: Nastavení pracovního adresáře pro úlohu na pozadí

WorkingDirectory umožňuje zadat alternativní adresář pro úlohu, ze které můžete spouštět skripty nebo otevírat soubory. V tomto příkladu úloha na pozadí určuje pracovní adresář, který se liší od aktuálního umístění adresáře.

PS C:\Test> Start-Job -WorkingDirectory C:\Test\Scripts { $PWD } | Receive-Job -AutoRemoveJob -Wait

Path
----
C:\Test\Scripts

Aktuální pracovní adresář tohoto příkladu je C:\Test. Start-Job používá parametr WorkingDirectory k určení pracovního adresáře úlohy. Parametr ScriptBlock používá $PWD k zobrazení pracovního adresáře úlohy. Receive-Job zobrazí výstup úlohy na pozadí. AutoRemoveJob odstraní úlohu a čekání potlačí příkazový řádek, dokud nebudou přijaty všechny výsledky.

Příklad 10: Určení pole pomocí parametru ArgumentList

Tento příklad používá argumentList parametr k určení pole argumentů. Pole je čárkami oddělený seznam názvů procesů.

Start-Job -ScriptBlock { Get-Process -Name $args } -ArgumentList powershell, pwsh, notepad

Id     Name      PSJobTypeName   State       HasMoreData     Location     Command
--     ----      -------------   -----       -----------     --------     -------
1      Job1      BackgroundJob   Running     True            localhost    Get-Process -Name $args

Rutina Start-Job ke spuštění příkazu používá parametr ScriptBlock . Get-Processpoužívá parametr Name k určení automatické proměnné $args. Parametr ArgumentList předá pole názvů procesů .$args Názvy procesů powershellu, pwsh a poznámkového bloku jsou procesy spuštěné v místním počítači.

Pokud chcete zobrazit výstup úlohy, použijte rutinu Receive-Job . Například Receive-Job -Id 1.

Příklad 11: Spuštění úlohy ve Windows PowerShellu 5.1

Tento příklad používá parametr PSVersion s hodnotou 5.1 ke spuštění úlohy v relaci Windows PowerShellu 5.1.

$PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      0      0      rc.1

$job = Start-Job -ScriptBlock { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-Job -Job $job

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  3383

Parametry

-ArgumentList

Určuje pole argumentů nebo hodnot parametrů pro skript určený parametrem FilePath nebo příkazem zadaným parametrem ScriptBlock .

Argumenty musí být předány argumentu ArgumentList jako argument pole s jednou dimenzí. Například seznam oddělený čárkami. Další informace o chování ArgumentList naleznete v tématu about_Splatting.

Typ:Object[]
Aliasy:Args
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Authentication

Určuje mechanismus, který se používá k ověření přihlašovacích údajů uživatele.

Přijatelné hodnoty pro tento parametr jsou následující:

  • Výchozí
  • Basic
  • Credssp
  • Trávit
  • Kerberos
  • Vyjednávat
  • NegotiateWithImplicitCredential

Výchozí hodnota je Default.

Ověřování CredSSP je k dispozici pouze v systémech Windows Vista, Windows Server 2008 a novějších verzích operačního systému Windows.

Další informace o hodnotách tohoto parametru naleznete v tématu AuthenticationMechanism.

Upozornění

Ověřování zprostředkovatele podpory zabezpečení přihlašovacích údajů (CredSSP), ve kterém jsou přihlašovací údaje uživatele předány vzdálenému počítači, který se má ověřit, je určený pro příkazy, které vyžadují ověření u více než jednoho prostředku, například pro přístup ke vzdálené síťové sdílené složce. Tento mechanismus zvyšuje riziko zabezpečení vzdálené operace. Pokud dojde k ohrožení zabezpečení vzdáleného počítače, dají se k řízení síťové relace použít přihlašovací údaje, které jsou mu předány.

Typ:AuthenticationMechanism
Přípustné hodnoty:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Credential

Určuje uživatelský účet, který má oprávnění k provedení této akce. Pokud není zadaný parametr Credential, příkaz použije 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ý rutinouGet-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?.

Typ:PSCredential
Position:Named
Default value:Current user
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-DefinitionName

Určuje název definice úlohy, kterou tato rutina spustí. Tento parametr použijte ke spuštění vlastních typů úloh, které mají název definice, například naplánované úlohy.

Když použijete Start-Job ke spuštění instance naplánované úlohy, úloha se spustí okamžitě bez ohledu na aktivační události úlohy nebo možnosti úlohy. Výsledná instance úlohy je naplánovaná úloha, ale neuloží se na disk, jako jsou aktivované naplánované úlohy. Parametr ArgumentList Start-Job nelze použít k zadání hodnot parametrů skriptů, které se spouští v naplánované úloze.

Tento parametr byl představen v PowerShellu 3.0.

Typ:String
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-DefinitionPath

Určuje cestu definice úlohy, kterou tato rutina spustí. Zadejte cestu definice. Zřetězení hodnot parametrů DefinitionPath a DefinitionName je plně kvalifikovaná cesta definice úlohy. Tento parametr použijte ke spuštění vlastních typů úloh, které mají cestu definice, například naplánované úlohy.

U plánovaných úloh je $HOME\AppData\Local\Windows\PowerShell\ScheduledJobhodnota parametru DefinitionPath .

Tento parametr byl představen v PowerShellu 3.0.

Typ:String
Position:1
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-FilePath

Určuje místní skript, který Start-Job se spouští jako úloha na pozadí. Zadejte cestu a název souboru skriptu nebo použijte kanál k odeslání cesty Start-Jobke skriptu . Skript musí být v místním počítači nebo ve složce, ke které má místní počítač přístup.

Při použití tohoto parametru PowerShell převede obsah zadaného souboru skriptu na blok skriptu a spustí blok skriptu jako úlohu na pozadí.

Typ:String
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InitializationScript

Určuje příkazy, které se spustí před spuštěním úlohy. Pokud chcete vytvořit blok skriptu, uzavřete příkazy do složených závorek ({}).

Tento parametr použijte k přípravě relace, ve které se úloha spouští. Můžete ho například použít k přidání funkcí, modulů snap-in a do relace.

Typ:ScriptBlock
Position:1
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InputObject

Určuje vstup pro příkaz. Zadejte proměnnou, která obsahuje objekty, nebo zadejte příkaz nebo výraz, který generuje objekty.

V hodnotě ScriptBlock parametru použijte $input automatickou proměnnou k reprezentaci vstupních objektů.

Typ:PSObject
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-LiteralPath

Určuje místní skript, který tato rutina spustí jako úlohu na pozadí. Zadejte cestu ke skriptu v místním počítači.

Start-Job používá hodnotu parametru LiteralPath přesně tak, jak je zadán. Žádné znaky nejsou interpretovány jako zástupné znaky. Pokud cesta obsahuje řídicí znaky, uzavřete ji do jednoduchých uvozovek. Jednoduché uvozovky říkají PowerShellu, aby nepřekládaly žádné znaky jako řídicí sekvence.

Typ:String
Aliasy:PSPath, LP
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Name

Určuje popisný název nové úlohy. Název můžete použít k identifikaci úlohy pro jiné rutiny úloh, jako je například rutina Stop-Job .

Výchozí popisný název je Job#, kde # je pořadové číslo, které se pro každou úlohu zvýší.

Typ:String
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-PSVersion

Určuje verzi PowerShellu, která se má použít pro spuštění úlohy. Pokud je hodnota PSVersion 5.1 Úloha se spustí v relaci Windows PowerShellu 5.1. Pro jakoukoli jinou hodnotu se úloha spustí pomocí aktuální verze PowerShellu.

Tento parametr byl přidán v PowerShellu 7 a funguje jenom ve Windows.

Typ:Version
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-RunAs32

Počínaje PowerShellem 7 nefunguje parametr RunAs32 na 64bitovém PowerShellu (pwsh). Pokud je runAs32 zadaný v 64bitovém PowerShellu, Start-Job vyvolá chybu ukončující výjimky. Pokud chcete spustit 32bitový proces PowerShellu (pwsh) pomocí RunAs32, musíte mít nainstalovaný 32bitový PowerShell.

V 32bitovém PowerShellu runAs32 vynutí spuštění úlohy v 32bitovém procesu, a to i v 64bitovém operačním systému.

V 64bitových verzích Systémů Windows 7 a Windows Server 2008 R2 platí, že pokud Start-Job příkaz obsahuje parametr RunAs32 , nemůžete k zadání přihlašovacích údajů jiného uživatele použít parametr Credential .

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-ScriptBlock

Určuje příkazy, které se mají spustit v úloze na pozadí. Pokud chcete vytvořit blok skriptu, uzavřete příkazy do složených závorek ({}). $input Pro přístup k hodnotě parametru InputObject použijte automatickou proměnnou. Tento parametr je povinný.

Typ:ScriptBlock
Aliasy:Command
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Type

Určuje vlastní typ pro úlohy spuštěné pomocí Start-Job. Zadejte název vlastního typu úlohy, například PSScheduledJob pro naplánované úlohy nebo PSWorkflowJob pro úlohy pracovních postupů. Tento parametr není platný pro standardní úlohy na pozadí.

Tento parametr byl představen v PowerShellu 3.0.

Typ:String
Position:2
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-WorkingDirectory

Určuje počáteční pracovní adresář úlohy na pozadí. Pokud parametr není zadaný, úloha se spustí z výchozího umístění. Výchozím umístěním je aktuální pracovní adresář volajícího, který úlohu spustil.

Tento parametr byl představen v PowerShellu 7.

Typ:String
Position:Named
Default value:$HOME on Unix (macOS, Linux) and $HOME\Documents on Windows
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

String

Objekt můžete do této rutiny převést pomocí vlastnosti Name do parametru Name . Můžete například přát objekt FileInfo z Get-ChildItem.

Výstupy

System.Management.Automation.PSRemotingJob

Tato rutina vrátí objekt PSRemotingJob představující úlohu, kterou spustil.

Poznámky

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

  • Všechny platformy:
    • sajb

Pokud chcete spustit na pozadí, Start-Job spustí se ve své vlastní relaci v aktuální relaci. Když použijete rutinu Invoke-Command Start-Job ke spuštění příkazu v relaci na vzdáleném počítači, Start-Job spustí se relace ve vzdálené relaci.