Start-ThreadJob
Membuat pekerjaan latar belakang yang mirip dengan cmdlet Start-Job.
Sintaks
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>]
Deskripsi
Start-ThreadJob membuat pekerjaan latar belakang yang mirip dengan cmdlet Start-Job. Perbedaan utamanya adalah bahwa pekerjaan yang dibuat berjalan di utas terpisah dalam proses lokal. Secara default, pekerjaan menggunakan direktori kerja pemanggil saat ini yang memulai pekerjaan.
Cmdlet juga mendukung parameter ThrottleLimit untuk membatasi jumlah pekerjaan yang berjalan sekaligus. Ketika lebih banyak pekerjaan dimulai, mereka diantrekan dan menunggu sampai jumlah pekerjaan saat ini turun di bawah batas pembatasan.
Contoh
Contoh 1 - Membuat pekerjaan latar belakang dengan batas utas 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;...
Contoh 2 - Membandingkan performa Start-Job dan Start-ThreadJob
Contoh ini menunjukkan perbedaan antara Start-Job dan Start-ThreadJob. Pekerjaan menjalankan cmdlet Start-Sleep selama 1 detik. Karena pekerjaan berjalan secara paralel, total waktu eksekusi adalah sekitar 1 detik, ditambah kapan saja diperlukan untuk membuat pekerjaan.
# 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
Setelah mengurangi 1 detik untuk waktu eksekusi, Anda dapat melihat bahwa Start-Job membutuhkan waktu sekitar 4,8 detik untuk membuat lima pekerjaan.
Start-ThreadJob 8 kali lebih cepat, membutuhkan waktu sekitar 0,6 detik untuk membuat lima pekerjaan. Hasilnya dapat bervariasi di lingkungan Anda tetapi peningkatan relatifnya harus sama.
Contoh 3 - Membuat pekerjaan menggunakan InputObject
Dalam contoh ini, blok skrip menggunakan $input variabel untuk menerima input dari parameter InputObject . Ini juga dapat dilakukan dengan mempipa objek ke 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
Contoh 4 - Mengalirkan output pekerjaan ke host induk
Menggunakan parameter StreamingHost, Anda dapat memberi tahu pekerjaan untuk mengarahkan semua output host ke host tertentu. Tanpa parameter ini, output masuk ke pengumpulan aliran data pekerjaan dan tidak muncul di konsol host hingga Anda menerima output dari pekerjaan.
Untuk contoh ini, host saat ini diteruskan ke Start-ThreadJob menggunakan variabel otomatis $Host.
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>
Perhatikan bahwa perintah dari Read-Host ditampilkan dan Anda dapat mengetik input. Kemudian, pesan dari Write-Warning ditampilkan. Cmdlet Receive-Job mengembalikan semua output dari pekerjaan.
Contoh 5 - Mengunduh beberapa file secara bersamaan
Invoke-WebRequest Cmdlet hanya dapat mengunduh satu file pada satu waktu. Contoh berikut menggunakan Start-ThreadJob untuk membuat beberapa pekerjaan utas untuk mengunduh beberapa file secara bersamaan.
$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
}
Parameter
-ArgumentList
Menentukan array argumen, atau nilai parameter, untuk skrip yang ditentukan oleh parameter FilePath atau ScriptBlock.
ArgumentList harus menjadi parameter terakhir pada baris perintah. Semua nilai yang mengikuti nama parameter ditafsirkan nilai dalam daftar argumen.
Properti parameter
| Jenis: | Object[] |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-FilePath
Menentukan file skrip untuk dijalankan sebagai pekerjaan latar belakang. Masukkan jalur dan nama file skrip. Skrip harus berada di komputer lokal atau dalam folder yang dapat diakses komputer lokal.
Saat Anda menggunakan parameter ini, PowerShell mengonversi konten file skrip yang ditentukan ke blok skrip dan menjalankan blokir skrip sebagai pekerjaan latar belakang.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
FilePath
| Position: | 0 |
| Wajib: | True |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-InitializationScript
Menentukan perintah yang dijalankan sebelum pekerjaan dimulai. Sertakan perintah dalam kurung kurawal ({}) untuk membuat blokir skrip.
Gunakan parameter ini untuk menyiapkan sesi di mana pekerjaan akan dijalankan. Misalnya, Anda dapat menggunakannya untuk menambahkan fungsi dan modul ke sesi.
Properti parameter
| Jenis: | ScriptBlock |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-InputObject
Menentukan objek yang digunakan sebagai input ke blok skrip. Ini juga memungkinkan input alur.
$input Gunakan variabel otomatis dalam blok skrip untuk mengakses objek input.
Properti parameter
| Jenis: | PSObject |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | True |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Name
Menentukan nama yang ramah untuk pekerjaan baru. Anda dapat menggunakan nama untuk mengidentifikasi tugas ke cmdlet tugas lainnya, seperti cmdlet Stop-Job.
Nama ramah default adalah "Job#", di mana "#" adalah angka ordinal yang bertahap untuk setiap pekerjaan.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-ScriptBlock
Menentukan perintah yang akan dijalankan di pekerjaan latar belakang. Sertakan perintah dalam kurung kurawal ({}) untuk membuat blokir skrip. Gunakan variabel otomatis $input untuk mengakses nilai parameter InputObject. Parameter ini diperlukan.
Properti parameter
| Jenis: | ScriptBlock |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
ScriptBlock
| Position: | 0 |
| Wajib: | True |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-StreamingHost
Parameter ini menyediakan cara aman utas untuk memungkinkan output Write-Host langsung masuk ke objek PSHost. Tanpa itu, output Write-Host masuk ke pengumpulan aliran data informasi pekerjaan dan tidak muncul di konsol host sampai setelah pekerjaan selesai berjalan.
Properti parameter
| Jenis: | PSHost |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-ThrottleLimit
Parameter ini membatasi jumlah pekerjaan yang berjalan pada satu waktu. Saat pekerjaan dimulai, mereka diantrekan dan menunggu hingga utas tersedia di kumpulan utas untuk menjalankan pekerjaan. Batas defaultnya adalah 5 utas.
Ukuran kumpulan utas bersifat global untuk sesi PowerShell. Menentukan ThrottleLimit dalam satu panggilan menetapkan batas untuk panggilan berikutnya dalam sesi yang sama.
Properti parameter
| Jenis: | Int32 |
| Nilai default: | 5 |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
CommonParameters
Cmdlet ini mendukung parameter umum: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, dan -WarningVariable. Untuk informasi selengkapnya, lihat about_CommonParameters.