Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Deskripsi singkat
Menyediakan informasi tentang bagaimana pekerjaan latar belakang PowerShell menjalankan perintah atau ekspresi di latar belakang tanpa berinteraksi dengan sesi saat ini.
Deskripsi panjang
PowerShell secara bersamaan menjalankan perintah dan skrip melalui pekerjaan. Ada tiga jenis pekerjaan yang disediakan oleh PowerShell untuk mendukung konkurensi.
-
RemoteJob- Perintah dan skrip berjalan pada sesi jarak jauh. Untuk informasi selengkapnya, lihat about_Remote_Jobs. -
BackgroundJob- Perintah dan skrip berjalan dalam proses terpisah pada komputer lokal. -
PSTaskJobatauThreadJob- Perintah dan skrip berjalan dalam utas terpisah dalam proses yang sama pada komputer lokal. Untuk informasi selengkapnya, lihat about_Thread_Jobs.
Menjalankan skrip dari jarak jauh, pada komputer terpisah atau dalam proses terpisah, memberikan isolasi yang besar. Kesalahan apa pun yang terjadi dalam pekerjaan jarak jauh tidak memengaruhi pekerjaan lain yang sedang berjalan atau sesi induk yang memulai pekerjaan. Namun, lapisan jarak jauh menambahkan overhead, termasuk serialisasi objek. Semua objek diserialisasikan dan dideserialisasi saat diteruskan antara sesi induk dan sesi (pekerjaan) jarak jauh. Serialisasi objek data kompleks yang besar dapat mengonsumsi sumber daya komputasi dan memori dalam jumlah besar dan mentransfer data dalam jumlah besar di seluruh jaringan.
Pekerjaan berbasis utas tidak sekuat pekerjaan jarak jauh dan latar belakang, karena berjalan dalam proses yang sama pada utas yang berbeda. Jika satu pekerjaan memiliki kesalahan kritis yang merusak proses, maka semua pekerjaan lain dalam proses dihentikan.
Namun, pekerjaan berbasis utas membutuhkan lebih sedikit overhead. Mereka tidak menggunakan lapisan jarak jauh atau serialisasi. Objek hasil dikembalikan sebagai referensi ke objek langsung dalam sesi saat ini. Tanpa overhead ini, pekerjaan berbasis utas berjalan lebih cepat dan menggunakan lebih sedikit sumber daya daripada jenis pekerjaan lainnya.
Penting
Sesi induk yang membuat pekerjaan juga memantau status pekerjaan dan mengumpulkan data alur. Proses turunan pekerjaan dihentikan oleh proses induk setelah pekerjaan mencapai status selesai. Jika sesi induk dihentikan, semua pekerjaan turunan yang berjalan dihentikan bersama dengan proses anak mereka.
Ada dua cara untuk mengatasi situasi ini:
- Gunakan
Invoke-Commanduntuk membuat pekerjaan yang berjalan dalam sesi terputus. Untuk informasi selengkapnya, lihat about_Remote_Jobs. - Gunakan
Start-Processuntuk membuat proses baru daripada pekerjaan. Untuk informasi selengkapnya, lihat Proses Mulai.
Cmdlet pekerjaan
-
Start-Job- Memulai pekerjaan latar belakang di komputer lokal. -
Get-Job- Mendapatkan pekerjaan latar belakang yang dimulai dalam sesi saat ini. -
Receive-Job- Mendapatkan hasil pekerjaan latar belakang. -
Stop-Job- Menghentikan pekerjaan latar belakang. -
Wait-Job- Menekan prompt perintah hingga satu atau semua pekerjaan selesai. -
Remove-Job- Menghapus pekerjaan latar belakang. -
Invoke-Command- Parameter AsJob membuat pekerjaan latar belakang di komputer jarak jauh. Anda dapat menggunakanInvoke-Commanduntuk menjalankan perintah pekerjaan apa pun dari jarak jauh, termasukStart-Job.
Cara memulai pekerjaan di komputer lokal
Untuk memulai pekerjaan latar belakang di komputer lokal, gunakan Start-Job cmdlet.
Untuk menulis Start-Job perintah, sertakan perintah yang dijalankan pekerjaan dalam kurung kurawal ({}).
Gunakan parameter ScriptBlock untuk menentukan perintah.
Perintah berikut memulai pekerjaan latar belakang yang menjalankan Get-Process perintah di komputer lokal.
Start-Job -ScriptBlock {Get-Process}
Saat Anda memulai pekerjaan latar belakang, prompt perintah segera kembali, bahkan jika pekerjaan membutuhkan waktu lama untuk diselesaikan. Anda dapat terus bekerja dalam sesi tanpa gangguan saat pekerjaan berjalan.
Perintah Start-Job mengembalikan objek yang mewakili pekerjaan. Objek pekerjaan berisi informasi yang berguna tentang pekerjaan, tetapi tidak berisi hasil pekerjaan.
Anda dapat menyimpan objek pekerjaan dalam variabel lalu menggunakannya dengan cmdlet Pekerjaan lainnya untuk mengelola pekerjaan latar belakang. Perintah berikut memulai objek pekerjaan dan menyimpan objek pekerjaan yang dihasilkan dalam $job variabel.
$job = Start-Job -ScriptBlock {Get-Process}
Mendapatkan objek pekerjaan
Get-Job Cmdlet mengembalikan objek yang mewakili pekerjaan latar belakang yang dimulai dalam sesi saat ini. Tanpa parameter, Get-Job mengembalikan semua pekerjaan yang dimulai dalam sesi saat ini.
Get-Job
Objek pekerjaan berisi status pekerjaan, yang menunjukkan apakah pekerjaan telah selesai. Pekerjaan yang sudah selesai memiliki status Selesai atau Gagal. Pekerjaan mungkin juga Diblokir atau Berjalan.
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Complete True localhost Get-Process
Anda dapat menyimpan objek pekerjaan dalam variabel dan menggunakannya untuk mewakili pekerjaan dalam perintah selanjutnya. Perintah berikut mendapatkan pekerjaan dengan ID 1 dan menyimpannya dalam $job variabel.
$job = Get-Job -Id 1
Mendapatkan hasil pekerjaan
Saat Anda menjalankan pekerjaan latar belakang, hasilnya tidak segera muncul. Untuk mendapatkan hasil pekerjaan latar belakang, gunakan Receive-Job cmdlet .
Contoh berikut, Receive-Job cmdlet mendapatkan hasil pekerjaan menggunakan objek pekerjaan dalam $job variabel .
Receive-Job -Job $job
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
668 7 2672 6168 104 32.26 488 csrss
...
Anda dapat menyimpan hasil pekerjaan dalam variabel. Perintah berikut menyimpan hasil pekerjaan dalam $job variabel ke $results variabel .
$results = Receive-Job -Job $job
Mendapatkan dan menyimpan hasil pekerjaan parsial
Receive-Job Cmdlet mendapatkan hasil pekerjaan latar belakang. Jika pekerjaan selesai, Receive-Job mendapatkan semua hasil pekerjaan. Jika pekerjaan masih berjalan, Receive-Job mendapatkan hasil yang telah dihasilkan sejauh ini. Anda dapat menjalankan Receive-Job perintah lagi untuk mendapatkan hasil yang tersisa.
Secara default, Receive-Job menghapus hasil dari cache tempat hasil pekerjaan disimpan. Ketika Anda menjalankan Receive-Job lagi, Anda hanya mendapatkan hasil baru yang tiba setelah eksekusi pertama.
Perintah berikut menunjukkan hasil Receive-Job perintah yang dijalankan sebelum pekerjaan selesai.
C:\PS> Receive-Job -Job $job
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
C:\PS> Receive-Job -Job $job
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
68 3 2632 664 29 0.36 1388 ccmsetup
749 22 21468 19940 203 122.13 3644 communicator
905 7 2980 2628 34 197.97 424 csrss
1121 25 28408 32940 174 430.14 3048 explorer
Gunakan parameter Keep untuk mencegah Receive-Job menghapus hasil pekerjaan yang dikembalikan. Perintah berikut menunjukkan efek penggunaan parameter Keep pada pekerjaan yang belum selesai.
C:\PS> Receive-Job -Job $job -Keep
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
C:\PS> Receive-Job -Job $job -Keep
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
68 3 2632 664 29 0.36 1388 ccmsetup
749 22 21468 19940 203 122.13 3644 communicator
905 7 2980 2628 34 197.97 424 csrss
1121 25 28408 32940 174 430.14 3048 explorer
Menunggu hasilnya
Jika Anda menjalankan perintah yang membutuhkan waktu lama untuk diselesaikan, Anda dapat menggunakan properti objek pekerjaan untuk menentukan kapan pekerjaan selesai. Perintah berikut menggunakan Get-Job objek untuk mendapatkan semua pekerjaan latar belakang dalam sesi saat ini.
Get-Job
Hasilnya muncul dalam tabel. Status pekerjaan muncul di kolom Status .
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Complete True localhost Get-Process
2 Job2 BackgroundJob Running True localhost Get-EventLog -Log ...
3 Job3 BackgroundJob Complete True localhost dir -Path C:\* -Re...
Dalam hal ini, properti Status mengungkapkan bahwa Pekerjaan 2 masih berjalan. Jika Anda menggunakan Receive-Job cmdlet untuk mendapatkan hasil pekerjaan sekarang, hasilnya tidak akan lengkap. Anda dapat menggunakan Receive-Job cmdlet berulang kali untuk mendapatkan semua hasilnya.
Gunakan properti Status untuk menentukan kapan pekerjaan selesai.
Anda juga dapat perintah Receive-Job -Wait . Saat Anda menggunakan parameter ini, cmdlet tidak mengembalikan prompt perintah hingga pekerjaan selesai dan semua hasil tersedia.
Anda juga dapat menggunakan Wait-Job cmdlet untuk menunggu salah satu atau semua hasil pekerjaan.
Wait-Job memungkinkan Anda menunggu satu atau beberapa pekerjaan tertentu atau untuk semua pekerjaan.
Perintah berikut menggunakan cmdlet Wait-Job untuk menunggu pekerjaan dengan Id 10.
Wait-Job -Id 10
Akibatnya, perintah PowerShell ditekan hingga pekerjaan selesai.
Anda juga dapat menunggu periode waktu yang telah ditentukan. Perintah ini menggunakan parameter Batas Waktu untuk membatasi waktu tunggu hingga 120 detik. Ketika waktu kedaluwarsa, prompt perintah kembali, tetapi pekerjaan terus berjalan di latar belakang.
Wait-Job -Id 10 -Timeout 120
Menghentikan pekerjaan
Untuk menghentikan pekerjaan latar belakang, gunakan Stop-Job cmdlet. Perintah berikut memulai pekerjaan untuk mendapatkan setiap entri di log peristiwa Sistem. Ini menyimpan objek pekerjaan dalam $job variabel.
$job = Start-Job -ScriptBlock {Get-EventLog -Log System}
Perintah berikut menghentikan pekerjaan. Ini menggunakan operator alur (|) untuk mengirim pekerjaan dalam variabel ke $jobStop-Job.
$job | Stop-Job
Menghapus pekerjaan
Untuk menghapus pekerjaan latar belakang, gunakan Remove-Job cmdlet. Perintah berikut menghapus pekerjaan dalam $job variabel.
Remove-Job -Job $job
Menyelidiki pekerjaan yang gagal
Pekerjaan dapat gagal karena berbagai alasan. objek pekerjaan berisi properti Alasan yang berisi informasi tentang penyebab kegagalan.
Contoh berikut memulai pekerjaan tanpa kredensial yang diperlukan.
$job = Start-Job -ScriptBlock {New-Item -Path HKLM:\Software\MyCompany}
Get-Job $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Failed False localhost New-Item -Path HKLM:...
Periksa properti Alasan untuk menemukan kesalahan yang menyebabkan pekerjaan gagal.
$job.ChildJobs[0].JobStateInfo.Reason
Dalam hal ini, pekerjaan gagal karena komputer jarak jauh memerlukan kredensial eksplisit untuk menjalankan perintah. Properti Alasan berisi pesan berikut:
Menyambungkan ke server jarak jauh gagal dengan pesan kesalahan berikut: "Akses ditolak".