Start-ThreadJob
Vytvoří úlohy na pozadí podobné rutině Start-Job.
Syntax
ScriptBlock
Start-ThreadJob
[-ScriptBlock] <ScriptBlock>
[-Name <String>]
[-InitializationScript <ScriptBlock>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-ThrottleLimit <Int32>]
[-StreamingHost <PSHost>]
[<CommonParameters>]
FilePath
Start-ThreadJob
[-FilePath] <String>
[-Name <String>]
[-InitializationScript <ScriptBlock>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-ThrottleLimit <Int32>]
[-StreamingHost <PSHost>]
[<CommonParameters>]
Description
Start-ThreadJob vytvoří úlohy na pozadí podobné rutině Start-Job. Hlavní rozdíl spočívá v tom, že úlohy, které jsou vytvořeny, běží v samostatných vláknech v rámci místního procesu. Ve výchozím nastavení používají úlohy aktuální pracovní adresář volajícího, který úlohu spustil.
Rutina také podporuje parametr ThrottleLimit, aby se omezil počet spuštěných úloh najednou. S tím, jak se spustí více úloh, se zařadí do fronty a počká, až aktuální počet úloh klesne pod limit omezení.
Příklady
Příklad 1 – Vytvoření úloh na pozadí s limitem vlákna 2
Start-ThreadJob -ScriptBlock { 1..100 | % { sleep 1; "Output $_" } } -ThrottleLimit 2
Start-ThreadJob -ScriptBlock { 1..100 | % { sleep 1; "Output $_" } }
Start-ThreadJob -ScriptBlock { 1..100 | % { sleep 1; "Output $_" } }
Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 ThreadJob Running True PowerShell 1..100 | % { sleep 1;...
2 Job2 ThreadJob Running True PowerShell 1..100 | % { sleep 1;...
3 Job3 ThreadJob NotStarted False PowerShell 1..100 | % { sleep 1;...
Příklad 2 – porovnání výkonu Start-Job a Start-ThreadJob
Tento příklad ukazuje rozdíl mezi Start-Job a Start-ThreadJob. Úlohy spouští rutinu Start-Sleep po dobu 1 sekundy. Vzhledem k tomu, že se úlohy spouští paralelně, celková doba provádění je přibližně 1 sekunda a kdykoli je potřeba k vytvoření úloh.
# start five background jobs each running 1 second
Measure-Command {1..5 | % {Start-Job {Start-Sleep 1}} | Wait-Job} | Select-Object TotalSeconds
Measure-Command {1..5 | % {Start-ThreadJob {Start-Sleep 1}} | Wait-Job} | Select-Object TotalSeconds
TotalSeconds
------------
5.7665849
1.5735008
Po odečtení 1 sekundy za dobu provádění uvidíte, že Start-Job vytvoření pěti úloh trvá přibližně 4,8 sekundy.
Start-ThreadJob je 8krát rychlejší a vytvoření pěti úloh trvá přibližně 0,6 sekundy. Výsledky se můžou ve vašem prostředí lišit, ale relativní zlepšení by mělo být stejné.
Příklad 3 – Vytvoření úloh pomocí InputObjectu
V tomto příkladu blok skriptu používá proměnnou $input k příjmu vstupu z InputObject parametru. To lze provést také propojením objektů do Start-ThreadJob.
$j = Start-ThreadJob -InputObject (Get-Process pwsh) -ScriptBlock { $input | Out-String }
$j | Wait-Job | Receive-Job
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
94 145.80 159.02 18.31 18276 1 pwsh
101 163.30 222.05 29.00 35928 1 pwsh
$j = Get-Process pwsh | Start-ThreadJob -ScriptBlock { $input | Out-String }
$j | Wait-Job | Receive-Job
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
94 145.80 159.02 18.31 18276 1 pwsh
101 163.30 222.05 29.00 35928 1 pwsh
Příklad 4 – Výstup úlohy streamu do nadřazeného hostitele
Pomocí parametru StreamingHost můžete úlohu sdělit, aby všechny výstupy hostitele nasměrovály na konkrétního hostitele. Bez tohoto parametru výstup přejde do kolekce datových proudů úloh a nezobrazí se v konzole hostitele, dokud neobdržíte výstup z úlohy.
V tomto příkladu se aktuální hostitel předá Start-ThreadJob pomocí $Host automatické proměnné.
PS> Start-ThreadJob -ScriptBlock { Read-Host 'Say hello'; Write-Warning 'Warning output' } -StreamingHost $Host
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
7 Job7 ThreadJob NotStarted False PowerShell Read-Host 'Say hello'; ...
PS> Say hello: Hello
WARNING: Warning output
PS> Receive-Job -Id 7
Hello
WARNING: Warning output
PS>
Všimněte si, že se zobrazí výzva z Read-Host a můžete zadat vstup. Pak se zobrazí zpráva z Write-Warning. Rutina Receive-Job vrátí veškerý výstup úlohy.
Parametry
-ArgumentList
Určuje pole argumentů nebo hodnot parametrů pro skript určený FilePath nebo ScriptBlock parametry.
ArgumentList musí být posledním parametrem příkazového řádku. Všechny hodnoty, které následují za názvem parametru, jsou interpretovány hodnoty v seznamu argumentů.
Vlastnosti parametru
| Typ: | Object[] |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-FilePath
Určuje soubor skriptu, který se má spustit jako úloha na pozadí. Zadejte cestu a název souboru 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í.
Vlastnosti parametru
| Typ: | String |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
FilePath
| Position: | 0 |
| Povinné: | True |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-InitializationScript
Určuje příkazy, které se spustí před spuštěním úlohy. Uzavřete příkazy do složených závorek ({}) a vytvořte blok skriptu.
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í a modulů do relace.
Vlastnosti parametru
| Typ: | ScriptBlock |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-InputObject
Určuje objekty použité jako vstup do bloku skriptu. Umožňuje také vstup kanálu. Pro přístup ke vstupním objektům použijte $input automatickou proměnnou v bloku skriptu.
Vlastnosti parametru
| Typ: | PSObject |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | True |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | 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í popisný název je Job#, kde #je pořadové číslo, které se pro každou úlohu zvýší.
Vlastnosti parametru
| Typ: | String |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-ScriptBlock
Určuje příkazy, které se mají spustit v úloze na pozadí. Uzavřete příkazy do složených závorek ({}) a vytvořte blok skriptu. Použijte $Input automatickou proměnnou pro přístup k hodnotě InputObject parametru. Tento parametr je povinný.
Vlastnosti parametru
| Typ: | ScriptBlock |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
ScriptBlock
| Position: | 0 |
| Povinné: | True |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-StreamingHost
Tento parametr poskytuje bezpečný způsob, jak umožnit Write-Host výstupu přejít přímo do předaného objektu PSHost. Bez ní Write-Host výstup přejde do shromažďování datových proudů dat úlohy a nezobrazí se v konzole hostitele, dokud se úlohy nedokončí.
Vlastnosti parametru
| Typ: | PSHost |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-ThrottleLimit
Tento parametr omezuje počet úloh spuštěných najednou. Při spuštění úloh se zařadí do fronty a počká, až bude ve fondu vláken k dispozici vlákno, aby se úloha spustila. Výchozí limit je 5 vláken.
Velikost fondu vláken je globální pro relaci PowerShellu. Zadání ThrottleLimit v jednom volání nastaví limit pro další volání ve stejné relaci.
Vlastnosti parametru
| Typ: | Int32 |
| Default value: | 5 |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
CommonParameters
Tato rutina podporuje běžné parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction a -WarningVariable. Další informace najdete v about_CommonParameters.