Start-ThreadJob
A parancsmaghoz Start-Job
hasonló háttérfeladatokat hoz létre.
Syntax
Start-ThreadJob
[-ScriptBlock] <ScriptBlock>
[-Name <String>]
[-InitializationScript <ScriptBlock>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-ThrottleLimit <Int32>]
[-StreamingHost <PSHost>]
[<CommonParameters>]
Start-ThreadJob
[-FilePath] <String>
[-Name <String>]
[-InitializationScript <ScriptBlock>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-ThrottleLimit <Int32>]
[-StreamingHost <PSHost>]
[<CommonParameters>]
Description
Start-ThreadJob
a parancsmaghoz Start-Job
hasonló háttérfeladatokat hoz létre. A fő különbség az, hogy a létrehozott feladatok külön szálakban futnak a helyi folyamaton belül. Alapértelmezés szerint a feladatok a feladatot kezdeményező hívó aktuális munkakönyvtárát használják.
A parancsmag egy ThrottleLimit paramétert is támogat az egyszerre futó feladatok számának korlátozásához. A további feladatok indításakor a rendszer sorba állítja őket, és megvárja, amíg az aktuális feladatok száma a szabályozási korlát alá csökken.
Példák
1. példa – Háttérfeladatok létrehozása 2 szálkorláttal
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;...
2. példa – A start-job és a Start-ThreadJob teljesítményének összehasonlítása
Ez a példa a kettő közötti Start-Job
Start-ThreadJob
különbséget mutatja be. A feladatok 1 másodpercen át futtatják a Start-Sleep
parancsmagot. Mivel a feladatok párhuzamosan futnak, a teljes végrehajtási idő körülbelül 1 másodperc, valamint a feladatok létrehozásához szükséges idő.
# 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
A végrehajtási idő 1 másodpercének kivonása után láthatja, hogy Start-Job
öt feladat létrehozása körülbelül 4,8 másodpercet vesz igénybe. Start-ThreadJob
8-szor gyorsabb, és körülbelül 0,6 másodpercet vesz igénybe öt feladat létrehozásához. Az eredmények eltérőek lehetnek a környezetben, de a relatív javulásnak azonosnak kell lennie.
3. példa – Feladatok létrehozása az InputObject használatával
Ebben a példában a szkriptblokk a változót használja az $input
InputObject paraméter bemenetének fogadására. Ezt úgy is megteheti, hogy az objektumokat a következőre Start-ThreadJob
ássa: .
$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
4. példa – Feladat kimenetének streamelése szülő gazdagépre
A StreamingHost paraméterrel megadhatja a feladatnak, hogy az összes gazdagép kimenetét egy adott gazdagépre irányítsa. E paraméter nélkül a kimenet a feladat adatfolyam-gyűjteményére kerül, és csak akkor jelenik meg a gazdagépkonzolon, ha megkapja a kimenetet a feladattól.
Ebben a példában az aktuális gazdagépet az automatikus változó használatával továbbítja Start-ThreadJob
a $Host
rendszer.
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>
Figyelje meg, hogy megjelenik a parancssor, Read-Host
és beírhatja a bemenetet. Ezután megjelenik a feladó Write-Warning
üzenete. A Receive-Job
parancsmag a feladat összes kimenetét visszaadja.
5. példa – Egyszerre több fájl letöltése
A Invoke-WebRequest
parancsmag egyszerre csak egy fájlt tud letölteni. Az alábbi példa több szálfeladat létrehozását használja Start-ThreadJob
több fájl egyidejű letöltéséhez.
$baseUri = 'https://github.com/PowerShell/PowerShell/releases/download'
$files = @(
@{
Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.msi"
OutFile = 'PowerShell-7.3.0-preview.5-win-x64.msi'
},
@{
Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.zip"
OutFile = 'PowerShell-7.3.0-preview.5-win-x64.zip'
},
@{
Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.msi"
OutFile = 'PowerShell-7.2.5-win-x64.msi'
},
@{
Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.zip"
OutFile = 'PowerShell-7.2.5-win-x64.zip'
}
)
$jobs = @()
foreach ($file in $files) {
$jobs += Start-ThreadJob -Name $file.OutFile -ScriptBlock {
$params = $using:file
Invoke-WebRequest @params
}
}
Write-Host "Downloads started..."
Wait-Job -Job $jobs
foreach ($job in $jobs) {
Receive-Job -Job $job
}
Paraméterek
-ArgumentList
A FilePath vagy a ScriptBlock paraméterek által megadott szkript argumentumainak vagy paraméterértékeinek tömbje.
Az argumentumlistának a parancssor utolsó paraméterének kell lennie. A paraméter nevét követő összes érték értelmezése az argumentumlistában történik.
Típus: | Object[] |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-FilePath
A háttérfeladatként futtatandó szkriptfájlt adja meg. Adja meg a szkript elérési útját és fájlnevét. A szkriptnek a helyi számítógépen vagy egy olyan mappában kell lennie, amelyhez a helyi számítógép hozzáférhet.
Ha ezt a paramétert használja, a PowerShell a megadott szkriptfájl tartalmát szkriptblokkmá alakítja, és háttérfeladatként futtatja a szkriptblokkot.
Típus: | String |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-InitializationScript
A feladat indítása előtt futtatott parancsokat adja meg. A parancsokat kapcsos zárójelekbe ({}
) ágyazva hozzon létre egy szkriptblokkot.
Ezzel a paraméterel előkészíti a munkamenetet, amelyben a feladat fut. Segítségével például függvényeket és modulokat adhat hozzá a munkamenethez.
Típus: | ScriptBlock |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-InputObject
Megadja a szkriptblokk bemeneteként használt objektumokat. Lehetővé teszi a folyamatbemenetet is. Használja a $input
szkriptblokk automatikus változóját a bemeneti objektumok eléréséhez.
Típus: | PSObject |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-Name
Az új feladat rövid nevét adja meg. A névvel azonosíthatja a feladatot más feladatparancsmagok, például a Stop-Job
parancsmagok számára.
Az alapértelmezett rövid név a "Feladat#", ahol a "#" egy sorszám, amely az egyes feladatokhoz növekszik.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-ScriptBlock
Megadja a háttérfeladatban futtatandó parancsokat. A parancsokat kapcsos zárójelekbe ({}
) ágyazva hozzon létre egy szkriptblokkot. $Input
Az automatikus változóval érheti el az InputObject paraméter értékét. Ez a paraméter kötelező.
Típus: | ScriptBlock |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-StreamingHost
Ez a paraméter biztonságos módot biztosít a szál biztonságos használatával, hogy Write-Host
a kimenet közvetlenül az átadott PSHost-objektumra menjen. Nélküle a kimenet a feladatadatok adatfolyam-gyűjteményére kerül, Write-Host
és csak a feladatok futtatása után jelenik meg a gazdagépkonzolon.
Típus: | PSHost |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-ThrottleLimit
Ez a paraméter korlátozza az egyszerre futó feladatok számát. A feladatok indításakor várólistára kerülnek, és megvárják, amíg egy szál elérhető a szálkészletben a feladat futtatásához. Az alapértelmezett korlát 5 szál.
A szálkészlet mérete globális a PowerShell-munkamenetre. Ha egy hívásban megad egy ThrottleLimit-et , akkor az ugyanabban a munkamenetben a későbbi hívásokra vonatkozó korlátot határozza meg.
Típus: | Int32 |
Position: | Named |
Alapértelmezett érték: | 5 |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
Bevitelek
Kimenetek
ThreadJob.ThreadJob