Start-Job
Spustí úlohu PowerShellu na pozadí.
Syntax
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 PowerShellu na pozadí v místním počítači.
Úloha PowerShellu na pozadí spustí příkaz bez interakce s aktuální relací. Při spuštění úlohy na pozadí se objekt úlohy okamžitě vrátí, 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 použijte rutinu Receive-Job
k získání výsledků ú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í Invoke-Command
rutiny spusťte příkaz na vzdáleném Start-Job
počítači. Další informace najdete v tématu about_Remote_Jobs.
Počínaje PowerShellem 3.0 Start-Job
můžete spouštět instance vlastních typů úloh, jako jsou například naplánované úlohy. Informace o tom, jak spouštět Start-Job
úlohy s vlastními typy, najdete v dokumentech nápovědy k funkci typu úlohy.
Počínaje PowerShellem 6.0 můžete spouštět úlohy pomocí operátoru na pozadí ampersand (&
). Funkce operátoru pozadí je podobná Start-Job
funkci . 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 použije aktuální pracovní adresář volajícího, který úlohu spustil.
Poznámka
Vytvoření úlohy na pozadí mimo proces s Start-Job
využitím se nepodporuje ve scénáři, kdy je PowerShell hostovaný v jiných aplikacích, například v powershellovém Azure Functions.
To je záměrně, protože Start-Job
závisí na pwsh
spustitelném souboru, který bude k dispozici pro $PSHOME
spuštění úlohy mimo proces na pozadí, ale když aplikace hostuje PowerShell, používá přímo balíčky powershellové sady NuGet SDK a nebude pwsh
se dodávat.
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
ke spuštění Get-Process
jako úlohy na pozadí používá parametr ScriptBlock. Parametr Name určuje, že se mají najít procesy PowerShellu pwsh
. Zobrazí se informace o úloze a PowerShell se vrátí k výzvě, zatímco úloha běží na pozadí.
K zobrazení výstupu úlohy použijte rutinu Receive-Job
. Například, Receive-Job -Id 1
.
Příklad 2: Spuštění úlohy na pozadí pomocí operátoru pozadí
Tento příklad používá operátor 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-Process
Použí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 výzvě, zatímco úloha běží na pozadí.
K zobrazení výstupu ú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 je uložená v proměnné a spouští 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ží v $jobWRM
proměnné. Invoke-Command
používá parametr ComputerName k určení počítačů, na kterých se úloha spouští. Get-Content
získá ze souboru názvy C:\Servers.txt
serverů.
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-Job
použije parametr ScriptBlock ke spuštění příkazu, který určuje Get-WinEvent
získání systémového protokolu. Parametr Credential určuje účet uživatele 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 v 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, 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
Používá parametr Name k zadání popisného názvu úlohy PShellJob. Parametr ScriptBlock určuje Get-Process
, že se mají načíst procesy s názvem PowerShell.
Příklad 7: Shromažďování a ukládání dat pomocí úlohy na pozadí
Tento příklad spustí úlohu, která shromáždí velké množství mapových dat a pak je uloží do .tif
souboru.
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {
Get-Map -Name * | Set-Content -Path D:\Maps.tif }
Start-Job
Použí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 $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 $input
proměnnou. Proměnná $input
získá objekty z parametru InputObject . Receive-Job
použije parametr Name k zadání úlohy a výstup 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ář v tomto příkladu je C:\Test
. Start-Job
používá parametr WorkingDirectory k určení pracovního adresáře úlohy. Parametr ScriptBlock se používá $PWD
k zobrazení pracovního adresáře úlohy. Receive-Job
zobrazí výstup úlohy na pozadí.
Funkce 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á 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ů do $args
. Názvy procesů PowerShell, pwsh a Poznámkový blok jsou procesy spuštěné na místním počítači.
K zobrazení výstupu úlohy použijte rutinu Receive-Job
. Například, Receive-Job -Id 1
.
Příklad 11: Spuštění úlohy v Windows PowerShell 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 { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-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 najdete v tématu about_Splatting.
Type: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Authentication
Určuje mechanismus, který se používá k ověřování přihlašovacích údajů uživatele.
Přijatelné hodnoty pro tento parametr jsou následující:
- Výchozí
- Basic
- Credssp
- Digest
- Kerberos
- Negotiate
- NegotiateWithImplicitCredential
Výchozí hodnota je Výchozí.
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 najdete v tématu AuthenticationMechanism.
Upozornění
Ověřování credSSP (Credential Security Support Provider), při kterém se přihlašovací údaje uživatele předávají vzdálenému počítači, aby se ověřily, je určené pro příkazy, které vyžadují ověření u více než jednoho prostředku, jako je například přístup ke vzdálené síťové složce. Tento mechanismus zvyšuje bezpečnostní riziko vzdálené operace. Pokud dojde k ohrožení zabezpečení vzdáleného počítače, lze k řízení síťové relace použít přihlašovací údaje, které jsou mu předány.
Type: | AuthenticationMechanism |
Accepted values: | Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos |
Position: | Named |
Default value: | Default |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Určuje uživatelský účet, který má oprávnění k provedení této akce. Pokud parametr Credential není zadaný, 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ý 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?.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionName
Určuje název definice úlohy, kterou tato rutina spustí. Pomocí tohoto parametru můžete spustit vlastní typy úloh, které mají název definice, například naplánované úlohy.
Pokud 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 aktivované naplánované úlohy. Parametr ArgumentList z Start-Job
není možné použít k zadání hodnot parametrů skriptů, které běží v naplánované úloze.
Tento parametr byl zaveden v PowerShellu 3.0.
Type: | String |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionPath
Určuje cestu k definici úlohy, kterou tato rutina spustí. Zadejte cestu definice. Zřetězení hodnot parametrů DefinitionPath a DefinitionName je plně kvalifikovanou cestou definice úlohy. Pomocí tohoto parametru můžete spustit vlastní typy úloh, které mají cestu k definici, například naplánované úlohy.
U naplánovaných úloh je $HOME\AppData\Local\Windows\PowerShell\ScheduledJob
hodnota parametru DefinitionPath .
Tento parametr byl zaveden v PowerShellu 3.0.
Type: | String |
Position: | 1 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | 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 pomocí kanálu odešlete cestu 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.
Když použijete tento parametr, PowerShell převede obsah zadaného souboru skriptu na blok skriptu a spustí blok skriptu jako úlohu na pozadí.
Type: | String |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | 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 spustí. Můžete ho například použít k přidání funkcí, modulů snap-in a modulů do relace.
Type: | ScriptBlock |
Position: | 1 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Určuje vstup do příkazu. Zadejte proměnnou, která obsahuje objekty, nebo zadejte příkaz nebo výraz, který objekty vygeneruje.
V hodnotě parametru ScriptBlock použijte automatickou $input
proměnnou k reprezentaci vstupních objektů.
Type: | PSObject |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | 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žije hodnotu parametru LiteralPath přesně tak, jak je zadaný. Žá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, že nemá interpretovat žádné znaky jako řídicí sekvence.
Type: | String |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Určuje popisný název nové úlohy. Název můžete použít k identifikaci úlohy pro jiné rutiny úlohy, jako je rutina Stop-Job
.
Výchozí popisný název je Job#
, kde #
je pořadové číslo, které se pro každou úlohu zvýší.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-PSVersion
Určuje verzi PowerShellu, která se má použít pro spuštění úlohy. Pokud je hodnota PSVersion5.1 Úloha se spustí v relaci Windows PowerShell 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.
Type: | Version |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAs32
Od PowerShellu 7 nefunguje parametr RunAs32 v 64bitovém PowerShellu (pwsh
).
Pokud je v 64bitovém PowerShellu zadaný příkaz RunAs32 , 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 funkce RunAs32 vynutí spuštění úlohy v 32bitovém procesu, a to i v 64bitovém operačním systému.
Pokud Start-Job
příkaz v 64bitových verzích Systémů Windows 7 a Windows Server 2008 R2 obsahuje parametr RunAs32 , nemůžete použít parametr Přihlašovací údaje k zadání přihlašovacích údajů jiného uživatele.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 automatickou $input
proměnnou pro přístup k hodnotě parametru InputObject . Tento parametr je povinný.
Type: | ScriptBlock |
Aliases: | Command |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Type
Určuje vlastní typ pro úlohy spuštěné nástrojem 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 zaveden v PowerShellu 3.0.
Type: | String |
Position: | 2 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | 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 zaveden v PowerShellu 7.
Type: | String |
Position: | Named |
Default value: | $HOME on Unix (macOS, Linux) and $HOME\Documents on Windows |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Vstupy
Do této rutiny můžete nasměrovat objekt s vlastností Name do parametru Name . Můžete například připojit objekt FileInfo z Get-ChildItem
.
Výstupy
System.Management.Automation.PSRemotingJob
Tato rutina vrátí objekt PSRemotingJob představující úlohu, kterou spustila.
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 vlastní relaci v aktuální relaci. Když pomocí rutiny Invoke-Command
spustíte Start-Job
příkaz v relaci na vzdáleném počítači, Start-Job
spustí se v relaci ve vzdálené relaci.
Související odkazy
Váš názor
Odeslat a zobrazit názory pro