Start-ThreadJob
cmdlet'ine Start-Job
benzer arka plan işleri oluşturur.
Sözdizimi
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
cmdlet'ine Start-Job
benzer arka plan işleri oluşturur. Temel fark, oluşturulan işlerin yerel işlem içinde ayrı iş parçacıklarında çalıştırılmasıdır. Varsayılan olarak, işler işi başlatan çağıranın geçerli çalışma dizinini kullanır.
Cmdlet, aynı anda çalışan iş sayısını sınırlamak için bir ThrottleLimit parametresini de destekler. Daha fazla iş başlatıldıkçe kuyruğa alınır ve geçerli iş sayısı azaltma sınırının altına düşene kadar bekler.
Örnekler
Örnek 1 - İş parçacığı sınırı 2 olan arka plan işleri oluşturma
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;...
Örnek 2 - Start-Job ve Start-ThreadJob performansını karşılaştırma
Bu örnekte ve Start-ThreadJob
arasındaki Start-Job
fark gösterilir. İşler cmdlet'ini Start-Sleep
1 saniye boyunca çalıştırır. İşler paralel çalıştığından, toplam yürütme süresi yaklaşık 1 saniyedir ve işleri oluşturmak için gereken süredir.
# 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
Yürütme süresi için 1 saniye çıkardıktan sonra beş iş oluşturmanın yaklaşık 4,8 saniye sürdüğünü Start-Job
görebilirsiniz. Start-ThreadJob
8 kat daha hızlıdır ve beş iş oluşturmak yaklaşık 0,6 saniye sürer. Sonuçlar ortamınızda farklılık gösterebilir, ancak göreli iyileştirme aynı olmalıdır.
Örnek 3 - InputObject kullanarak iş oluşturma
Bu örnekte betik bloğu, InputObject parametresinden giriş almak için değişkenini kullanır$input
. Bu, nesneleri öğesine Start-ThreadJob
borulama yoluyla da yapılabilir.
$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
Örnek 4 - İş çıkışını üst konağa akışla aktar
StreamingHost parametresini kullanarak bir işe tüm konak çıkışını belirli bir konağa yönlendirmesini söyleyebilirsiniz. Bu parametre olmadan çıkış, iş veri akışı koleksiyonuna gider ve siz işten çıktıyı alıncaya kadar konak konsolunda görünmez.
Bu örnekte, geçerli ana bilgisayar otomatik değişken kullanılarak $Host
öğesine Start-ThreadJob
geçirilir.
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>
isteminin Read-Host
görüntülendiğine ve giriş yazabildiğinize dikkat edin. Ardından, iletisi Write-Warning
görüntülenir. Receive-Job
Cmdlet, işten gelen tüm çıkışı döndürür.
Örnek 5 - Aynı anda birden çok dosya indirme
Invoke-WebRequest
Cmdlet aynı anda yalnızca bir dosya indirebilir. Aşağıdaki örnek, aynı anda birden çok dosya indirmek üzere birden çok iş parçacığı işi oluşturmak için kullanır Start-ThreadJob
.
$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
}
Parametreler
-ArgumentList
FilePath veya ScriptBlock parametreleri tarafından belirtilen betik için bir bağımsız değişken dizisini veya parametre değerlerini belirtir.
ArgumentList , komut satırındaki son parametre olmalıdır. Parametre adını izleyen tüm değerler bağımsız değişken listesindeki yorumlanan değerlerdir.
Tür: | Object[] |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-FilePath
Arka plan işi olarak çalıştırılacak bir betik dosyası belirtir. Betiğin yolunu ve dosya adını girin. Betik yerel bilgisayarda veya yerel bilgisayarın erişebileceği bir klasörde olmalıdır.
Bu parametreyi kullandığınızda PowerShell, belirtilen betik dosyasının içeriğini bir betik bloğuna dönüştürür ve betik bloğunu arka plan işi olarak çalıştırır.
Tür: | String |
Position: | 0 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-InitializationScript
İş başlamadan önce çalıştırılacak komutları belirtir. Betik bloğu oluşturmak için komutları küme ayraçları ({}
) içine alın.
İşin çalıştığı oturumu hazırlamak için bu parametreyi kullanın. Örneğin, oturuma işlevler ve modüller eklemek için kullanabilirsiniz.
Tür: | ScriptBlock |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-InputObject
Betik bloğuna giriş olarak kullanılan nesneleri belirtir. İşlem hattı girişlerine de izin verir. Giriş nesnelerine $input
erişmek için betik bloğundaki otomatik değişkeni kullanın.
Tür: | PSObject |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | True |
Joker karakterleri kabul et: | False |
-Name
Yeni iş için kolay bir ad belirtir. cmdlet'i gibi Stop-Job
diğer iş cmdlet'lerine işi tanımlamak için bu adı kullanabilirsiniz.
Varsayılan kolay ad "İş#"tir; burada "#" her iş için artırılan bir sıra numarasıdır.
Tür: | String |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-ScriptBlock
Arka plan işinde çalıştırılacak komutları belirtir. Betik bloğu oluşturmak için komutları küme ayraçları ({}
) içine alın. $Input
InputObject parametresinin değerine erişmek için otomatik değişkenini kullanın. Bu parametre zorunludur.
Tür: | ScriptBlock |
Position: | 0 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-StreamingHost
Bu parametre, çıkışın doğrudan geçirilen PSHost nesnesine gitmesine izin vermek Write-Host
için iş parçacığı güvenli bir yol sağlar. Bu olmadan, Write-Host
çıkış iş bilgileri veri akışı koleksiyonuna gider ve işlerin çalışması bitene kadar konak konsolunda görünmez.
Tür: | PSHost |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-ThrottleLimit
Bu parametre, bir kerede çalışan iş sayısını sınırlar. İşler başlatılırken kuyruğa alınırlar ve iş parçacığı havuzunda işi çalıştırmak için bir iş parçacığı kullanılabilir olana kadar beklerler. Varsayılan sınır 5 iş parçacığıdır.
İş parçacığı havuzu boyutu PowerShell oturumu için geneldir. Bir çağrıda ThrottleLimit belirtilmesi, aynı oturumdaki sonraki çağrıların sınırını ayarlar.
Tür: | Int32 |
Position: | Named |
Default value: | 5 |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
Girişler
Çıkışlar
ThreadJob.ThreadJob
İlişkili Bağlantılar
PowerShell