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. Můžete pokračovat v práci v relaci bez přerušení, zatímco úloha běží.
Objekt úlohy obsahuje užitečné informace o úloze, ale neobsahuje výsledky úlohy.
Po dokončení úlohy pomocí rutiny Receive-Job
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 na vzdáleném počítači příkaz Start-Job
. Další informace najdete v tématu about_Remote_Jobs.
Počínaje PowerShellem 3.0 může Start-Job
spustit instance vlastních typů úloh, jako jsou například naplánované úlohy. Informace o tom, jak pomocí Start-Job
spouštět ú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 pozadí ampersand (&
). Funkce operátoru pozadí je podobná Start-Job
. Obě metody spuštění úlohy vytvoří PSRemotingJob objekt úlohy. Další informace o použití ampersand (&
), naleznete 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
se nastaví na aktuální pracovní adresář volajícího, který úlohu spustil.
Poznámka
Vytvoření úlohy na pozadí mimo proces s Start-Job
se ve scénáři, ve kterém je PowerShell hostovaný v jiných aplikacích, jako je Například PowerShell Azure Functions, nepodporuje.
To je záměrné, protože Start-Job
závisí na tom, že spustitelný soubor pwsh
je k dispozici v rámci $PSHOME
pro spuštění úlohy na pozadí mimo proces. Ale když aplikace hostuje PowerShell, přímo využívá balíčky NuGet SDK PowerShellu a nebude mít pwsh
dodány.
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-Job
používá parametr ScriptBlock ke spuštění Get-Process
jako úlohu na pozadí. Parametr Name určuje vyhledání procesů 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 pozadí ampersand (&
) ke spuštění úlohy na pozadí na 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-Process
používá parametr název k určení procesů PowerShellu pwsh
. Symbol 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í 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 proměnné $jobWRM
.
Invoke-Command
pomocí parametru ComputerName určuje počítače, ve kterých se úloha spouští.
Get-Content
získá názvy serverů ze souboru C:\Servers.txt
.
Parametr ScriptBlock určuje příkaz, který Get-Service
spustí službu WinRM. Parametr JobName určuje přátelský název pro úlohu, 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-Job
použije parametr ScriptBlock k spuštění příkazu, který určuje Get-WinEvent
pro získání protokolu System. Parametr přihlašovacích údajů 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 proměnné $j
.
Objekt v proměnné $j
je odeslán potrubím do Select-Object
. Parametr vlastnosti určuje hvězdičku (*
), která zobrazí všechny vlastnosti 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-Job
používá parametr FilePath k určení souboru skriptu uloženého 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
používá parametr Name k zadaní přátelského názvu úlohy PShellJob. Parametr ScriptBlock určuje, Get-Process
získat procesy 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-Job
používá parametr Name k specifikaci popisného názvu úlohy, GetMappingFiles. Parametr InitializationScript spustí blok skriptu, který importuje modul MapFunctions. Parametr ScriptBlock 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á $input
automatickou proměnnou ke zpracování vstupního objektu. K zobrazení výstupu úlohy použijte Receive-Job
.
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 $input
automatickou proměnnou. Proměnná $input
získá objekty z parametru InputObject.
Receive-Job
pomocí parametru Name určí úlohu a vypíše výsledky. 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
k určení pracovního adresáře úlohy používá parametr WorkingDirectory. Parametr ScriptBlock používá $PWD
k zobrazení pracovního adresáře úlohy.
Receive-Job
zobrazí výstup úlohy na pozadí.
AutoRemoveJob odstraní úlohu a Wait 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á parametr ArgumentList 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-Process
použí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 PowerShell 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říkaz zadaný parametrem ScriptBlock.
Argumenty musí být předány ArgumentList jako argument pole s jednou dimenzí. Například seznam oddělený čárkami. Další informace o chování ArgumentListnaleznete 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í
- Základní
- Credssp
- Stručný Přehled (if "Digest" is used in the context of summarizing or condensing information)
- Kerberos
- Vyjednávat
- VyjednávatSPodmíněnýmPověřením
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.
Opatrnost
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 pro ověření, je navrženo pro příkazy, které vyžadují ověření u více než jednoho prostředku, jako například přístup k síťové sdílené složce na dálku. 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 přihlašovacích údajů, použije příkaz 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 najdete 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 ArgumentListStart-Job
nelze použít k zadání hodnot parametrů skriptů spuštěných 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 DefinitionPath a DefinitionName parametrů je plně kvalifikovanou cestou 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 hodnota parametru DefinitionPath$HOME\AppData\Local\Windows\PowerShell\ScheduledJob
.
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
běží jako úloha na pozadí. Zadejte cestu a název souboru skriptu nebo použijte kanál k odeslání cesty skriptu do Start-Job
. 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í, doplňků a modulů 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 escape sekvence, uzavřete ji do jednoduchých uvozovek. Jednoduché uvozovky říkají PowerShellu, aby žádné znaky neinterpretoval jako sekvence úniku.
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 přátelský název nové úlohy. Název můžete použít k identifikaci úlohy do jiných rutin úloh, jako je například rutina Stop-Job
.
Výchozí přátelský název je Job#
, kde #
je pořadové číslo, které se zvyšuje pro každou úlohu.
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 v 64bitovém PowerShellu zadáno RunAs32, Start-Job
vyvolá terminující výjimku.
Pokud chcete spustit 32bitový proces PowerShellu (pwsh
) s 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 Windows 7 a Windows Serveru 2008 R2 platí, že pokud příkaz Start-Job
obsahuje parametr RunAs32, nemůžete k zadání přihlašovacích údajů jiného uživatele použít parametr přihlašovací údaje.
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 ({}
). Použijte $input
automatickou proměnnou pro přístup k hodnotě InputObject parametru. 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é 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
Objekt můžete předat do tohoto cmdletu pomocí vlastnosti Name k parametru Name. Můžete například přesměrovat 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
Pro spuštění na pozadí běží Start-Job
ve své vlastní relaci v aktuální relaci. Když použijete rutinu Invoke-Command
ke spuštění příkazu Start-Job
v relaci na vzdáleném počítači, Start-Job
běží ve vzdálené relaci.