Aracılığıyla paylaş


Start-ThreadJob

Start-Job cmdlet'ine benzer arka plan işleri oluşturur.

Sözdizimi

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, Start-Job cmdlet'ine 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 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 örnek, Start-Job ile Start-ThreadJobarasındaki farkı gösterir. İşler, Start-Sleep cmdlet'ini 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 Start-Job beş iş oluşturmanın yaklaşık 4,8 saniye sürdüğünü 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, $input parametresinden giriş almak için değişkenini kullanır. Bu, nesneleri Start-ThreadJobborulama 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 konak Start-ThreadJob otomatik değişkeni kullanılarak $Host 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>

Read-Host isteminin görüntülendiğine ve giriş yazabildiğinize dikkat edin. Ardından, Write-Warning iletisi görüntülenir. Receive-Job cmdlet'i işin tüm çıkışını döndürür.

Örnek 5 - Aynı anda birden çok dosya indirme

Invoke-WebRequest cmdlet'i 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 Start-ThreadJob kullanır.

$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.

Parametre özellikleri

Tür:

Object[]

Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer: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.

Parametre özellikleri

Tür:String
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

FilePath
Position:0
Zorunlu:True
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-InitializationScript

İş başlamadan önce çalıştırılacak komutları belirtir. Komut dosyası bloğu oluşturmak için komutları küme ayraçları ({}) içine yerleştirin.

İşin çalıştığı oturumu hazırlamak için bu parametreyi kullanın. Örneğin, oturuma işlevler ve modüller eklemek için kullanabilirsiniz.

Parametre özellikleri

Tür:ScriptBlock
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-InputObject

Betik bloğuna giriş olarak kullanılan nesneleri belirtir. İşlem hattı girişlerine de izin verir. Giriş nesnelerine erişmek için betik bloğundaki $input otomatik değişkenini kullanın.

Parametre özellikleri

Tür:PSObject
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:True
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-Name

Yeni iş için anlamlı bir ad belirtir. adı kullanarak işi Stop-Job cmdlet'i gibi diğer iş cmdlet'lerine tanımlayabilirsiniz.

Varsayılan kolay ad "İş#"tir; burada "#" her iş için artırılan bir sıra numarasıdır.

Parametre özellikleri

Tür:String
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-ScriptBlock

Arka plan işinde çalıştırılacak komutları belirtir. Komut dosyası bloğu oluşturmak için komutları küme ayraçları ({}) içine yerleştirin. $input parametresinin değerine erişmek için otomatik değişkenini kullanın. Bu parametre gereklidir.

Parametre özellikleri

Tür:ScriptBlock
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

ScriptBlock
Position:0
Zorunlu:True
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-StreamingHost

Bu parametre, Write-Host çıkışının doğrudan PSHost nesnesine geçmesine izin vermek için iş parçacığı güvenli bir yol sağlar. Bu olmadan, Write-Host çıktısı iş bilgileri veri akışı koleksiyonuna gider ve işlerin çalışması bitene kadar konak konsolunda görünmez.

Parametre özellikleri

Tür:PSHost
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer: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.

Parametre özellikleri

Tür:Int32
Default value:5
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

CommonParameters

Bu cmdlet yaygın parametreleri destekler: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction ve -WarningVariable. Daha fazla bilgi için bkz. about_CommonParameters.

Girişler

PSObject

Çıkışlar

ThreadJob.ThreadJob