about_Job_Details
Deskripsi singkat
Menyediakan detail tentang pekerjaan latar belakang pada komputer lokal dan jarak jauh.
Deskripsi terperinci
Topik ini menjelaskan konsep pekerjaan latar belakang dan menyediakan informasi teknis tentang cara kerja pekerjaan latar belakang di PowerShell.
Topik ini adalah suplemen untuk topik about_Jobs, about_Thread_Jobs, dan about_Remote_Jobs .
Tentang pekerjaan latar belakang
Pekerjaan latar belakang menjalankan perintah atau ekspresi secara asinkron. Ini mungkin menjalankan cmdlet, fungsi, skrip, atau tugas berbasis perintah lainnya. Ini dirancang untuk menjalankan perintah yang membutuhkan waktu lama, tetapi Anda dapat menggunakannya untuk menjalankan perintah apa pun di latar belakang.
Saat perintah sinkron berjalan, perintah PowerShell ditekan hingga perintah selesai. Tetapi pekerjaan latar belakang tidak menekan prompt PowerShell. Perintah untuk memulai pekerjaan latar belakang mengembalikan objek pekerjaan. Perintah segera kembali sehingga Anda dapat mengerjakan tugas lain saat pekerjaan latar belakang berjalan.
Namun, ketika Anda memulai pekerjaan latar belakang, Anda tidak segera mendapatkan hasilnya bahkan jika pekerjaan berjalan sangat cepat. Objek pekerjaan yang dikembalikan berisi informasi yang berguna tentang pekerjaan, tetapi tidak berisi hasil pekerjaan. Anda harus menjalankan perintah terpisah untuk mendapatkan hasil pekerjaan. Anda juga dapat menjalankan perintah untuk menghentikan pekerjaan, menunggu pekerjaan selesai, dan menghapus pekerjaan.
Untuk membuat waktu pekerjaan latar belakang independen dari perintah lain, setiap pekerjaan latar belakang berjalan dalam sesi PowerShell sendiri. Namun, ini bisa menjadi koneksi sementara yang dibuat hanya untuk menjalankan pekerjaan dan kemudian dihancurkan, atau dapat menjadi PSSession persisten yang dapat Anda gunakan untuk menjalankan beberapa pekerjaan atau perintah terkait.
Menggunakan cmdlet pekerjaan
Start-Job
Gunakan perintah untuk memulai pekerjaan latar belakang di komputer lokal.
Start-Job
mengembalikan objek pekerjaan. Anda juga bisa mendapatkan objek yang mewakili pekerjaan yang dimulai di komputer lokal menggunakan Get-Job
cmdlet.
Untuk mendapatkan hasil pekerjaan, gunakan Receive-Job
perintah . Jika pekerjaan tidak selesai, Receive-Job
mengembalikan hasil parsial. Anda juga dapat menggunakan Wait-Job
cmdlet untuk menekan prompt perintah hingga satu atau semua pekerjaan yang dimulai dalam sesi selesai.
Untuk menghentikan pekerjaan latar belakang, gunakan Stop-Job
cmdlet. Untuk menghapus pekerjaan, gunakan Remove-Job
cmdlet.
Untuk informasi selengkapnya tentang cara kerja cmdlet, lihat topik Bantuan untuk setiap cmdlet, dan lihat about_Jobs.
Memulai pekerjaan latar belakang pada komputer jarak jauh
Anda dapat membuat dan mengelola pekerjaan latar belakang di komputer lokal atau jarak jauh. Untuk menjalankan pekerjaan latar belakang dari jarak jauh, gunakan parameter AsJob dari cmdlet seperti Invoke-Command
, atau gunakan Invoke-Command
cmdlet untuk menjalankan Start-Job
perintah dari jarak jauh. Anda juga dapat memulai pekerjaan latar belakang dalam sesi interaktif.
Untuk informasi selengkapnya tentang pekerjaan latar belakang jarak jauh, lihat about_Remote_Jobs.
Pekerjaan turunan
Setiap pekerjaan latar belakang terdiri dari pekerjaan induk dan satu atau beberapa pekerjaan anak. Dalam pekerjaan yang mulai menggunakan Start-Job
atau parameter AsJob dari Invoke-Command
, pekerjaan induk adalah eksekutif. Ini tidak menjalankan perintah apa pun atau mengembalikan hasil apa pun. Perintah sebenarnya dijalankan oleh pekerjaan anak. Pekerjaan yang mulai menggunakan cmdlet lain mungkin bekerja secara berbeda.
Pekerjaan anak disimpan di properti ChildJobs dari objek pekerjaan induk. Properti ChildJobs dapat berisi satu atau banyak objek pekerjaan anak. Objek pekerjaan anak memiliki Nama, ID, dan InstanceId yang berbeda dari pekerjaan induk sehingga Anda dapat mengelola pekerjaan induk dan anak satu per satu atau sebagai unit.
Untuk mendapatkan pekerjaan induk dan anak dari pekerjaan, gunakan parameter IncludeChildJobs cmdlet Get-Job
. Parameter IncludeChildJob diperkenalkan di Windows PowerShell 3.0.
PS> Get-Job -IncludeChildJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
Untuk mendapatkan pekerjaan induk dan hanya pekerjaan anak dengan nilai Status tertentu, gunakan parameter ChildJobState cmdletGet-Job
. Parameter ChildJobState diperkenalkan di Windows PowerShell 3.0.
PS> Get-Job -ChildJobState Failed
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
3 Job3 Failed False localhost Get-Process
Untuk mendapatkan pekerjaan anak dari pekerjaan di semua versi PowerShell, gunakan properti ChildJob dari pekerjaan induk.
PS> (Get-Job Job1).ChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
Anda juga dapat menggunakan perintah pada pekerjaan anak, seperti yang Get-Job
ditunjukkan dalam perintah berikut:
PS> Get-Job Job3
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 Failed False localhost Get-Process
Konfigurasi pekerjaan anak tergantung pada perintah yang Anda gunakan untuk memulai pekerjaan.
Ketika Anda menggunakan
Start-Job
untuk memulai pekerjaan di komputer lokal, pekerjaan tersebut terdiri dari pekerjaan induk eksekutif dan pekerjaan anak yang menjalankan perintah.Saat Anda menggunakan parameter
Invoke-Command
AsJob untuk memulai pekerjaan di satu atau beberapa komputer, pekerjaan tersebut terdiri dari pekerjaan induk eksekutif dan pekerjaan anak untuk setiap pekerjaan yang dijalankan di setiap komputer.Ketika Anda menggunakan
Invoke-Command
untuk menjalankan perintah pada satu atau beberapaStart-Job
komputer jarak jauh, hasilnya sama dengan perintah lokal yang dijalankan pada setiap komputer jarak jauh. Perintah mengembalikan objek pekerjaan untuk setiap komputer. Objek pekerjaan terdiri dari pekerjaan induk eksekutif dan satu pekerjaan anak yang menjalankan perintah.
Pekerjaan induk mewakili semua pekerjaan anak. Saat mengelola pekerjaan induk, Anda juga mengelola pekerjaan anak terkait. Misalnya, jika Anda menghentikan pekerjaan induk, semua pekerjaan anak dihentikan. Jika Anda mendapatkan hasil pekerjaan induk, Anda mendapatkan hasil dari semua pekerjaan anak.
Namun, Anda juga dapat mengelola pekerjaan anak satu per satu. Ini paling berguna ketika Anda ingin menyelidiki masalah dengan pekerjaan atau mendapatkan hasil hanya dari salah satu dari sejumlah pekerjaan anak yang dimulai menggunakan parameter AsJob dari Invoke-Command
.
Perintah berikut menggunakan parameter AsJob untuk Invoke-Command
memulai pekerjaan latar belakang di komputer lokal dan dua komputer jarak jauh. Perintah menyimpan pekerjaan dalam $j
variabel.
PS> $j = Invoke-Command -ComputerName localhost, Server01, Server02 `
-Command {Get-Date} -AsJob
Saat Anda menampilkan properti Nama dan ChildJob dari pekerjaan di $j
, itu menunjukkan bahwa perintah mengembalikan objek pekerjaan dengan tiga pekerjaan anak, satu untuk setiap komputer.
PS> $j | Format-List Name, ChildJobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
Saat Anda menampilkan pekerjaan induk, itu menunjukkan bahwa pekerjaan gagal.
PS> $j
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemotingJob Failed False localhost,Server...
Tetapi ketika Anda menjalankan Get-Job
perintah yang mendapatkan pekerjaan anak, output menunjukkan bahwa hanya satu pekerjaan anak yang gagal.
PS> Get-Job -IncludeChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 RemotingJob Failed False localhost,Server...
4 Job4 Completed True localhost Get-Date
5 Job5 Failed False Server01 Get-Date
6 Job6 Completed True Server02 Get-Date
Untuk mendapatkan hasil semua pekerjaan anak, gunakan Receive-Job
cmdlet untuk mendapatkan hasil pekerjaan induk. Tetapi Anda juga bisa mendapatkan hasil pekerjaan anak tertentu, seperti yang ditunjukkan dalam perintah berikut.
PS> Receive-Job -Name Job6 -Keep | Format-Table ComputerName,
>> DateTime -AutoSize
ComputerName DateTime
------------ --------
Server02 Thursday, March 13, 2008 4:16:03 PM
Fitur pekerjaan anak dari pekerjaan latar belakang PowerShell memberi Anda lebih banyak kontrol atas pekerjaan yang Anda jalankan.
Jenis pekerjaan
PowerShell mendukung berbagai jenis pekerjaan untuk tugas yang berbeda. Dimulai di Windows PowerShell 3.0, pengembang dapat menulis "adaptor sumber pekerjaan" yang menambahkan jenis pekerjaan baru ke PowerShell dan menyertakan adaptor sumber pekerjaan dalam modul. Saat mengimpor modul, Anda dapat menggunakan jenis pekerjaan baru di sesi Anda.
Misalnya, modul PSScheduledJob menambahkan pekerjaan terjadwal dan modul PSWorkflow menambahkan pekerjaan alur kerja.
Jenis pekerjaan kustom mungkin berbeda secara signifikan dari pekerjaan latar belakang PowerShell standar. Misalnya, pekerjaan terjadwal disimpan di disk; mereka tidak hanya ada dalam sesi tertentu. Pekerjaan alur kerja dapat ditangguhkan dan dilanjutkan.
Cmdlet yang Anda gunakan untuk mengelola pekerjaan kustom bergantung pada jenis pekerjaan. Untuk beberapa orang, Anda menggunakan cmdlet pekerjaan standar, seperti Get-Job
dan Start-Job
. Yang lain datang dengan cmdlet khusus yang hanya mengelola jenis pekerjaan tertentu. Untuk informasi terperinci tentang jenis pekerjaan kustom, lihat topik bantuan tentang jenis pekerjaan.
Untuk menemukan jenis pekerjaan pekerjaan, gunakan Get-Job
cmdlet . Get-Job
mengembalikan objek pekerjaan yang berbeda untuk berbagai jenis pekerjaan. Nilai properti PSJobTypeName dari objek pekerjaan yang Get-Job
mengembalikan menunjukkan jenis pekerjaan.
Tabel berikut mencantumkan jenis pekerjaan yang disertakan dengan PowerShell.
Jenis Pekerjaan | Deskripsi |
---|---|
BackgroundJob | Mulai menggunakan Start-Job cmdlet. |
RemoteJob | Mulai menggunakan parameter AsJob dari |
Invoke-Command cmdlet. |
|
PSWorkflowJob | Mulai menggunakan parameter AsJob dari alur kerja. |
PSScheduledJob | Instans pekerjaan terjadwal yang dimulai oleh pemicu pekerjaan. |
CIMJob | Mulai menggunakan parameter AsJob cmdlet dari |
Modul CDXML. | |
WMIJob | Mulai menggunakan parameter AsJob cmdlet dari |
Modul WMI. | |
PSEventJob | Dibuat menggunakanRegister-ObjectEvent dan menentukan |
tindakan dengan parameter Tindakan . |
CATATAN: Sebelum menggunakan Get-Job
cmdlet untuk mendapatkan pekerjaan dari jenis tertentu, verifikasi bahwa modul yang menambahkan jenis pekerjaan diimpor ke sesi saat ini.
Jika tidak, Get-Job
tidak mendapatkan pekerjaan dengan jenis tersebut.
Contoh
Perintah berikut membuat pekerjaan latar belakang lokal, pekerjaan latar belakang jarak jauh, pekerjaan alur kerja, dan pekerjaan terjadwal. Kemudian, ia menggunakan Get-Job
cmdlet untuk mendapatkan pekerjaan. Get-Job
tidak mendapatkan pekerjaan terjadwal, tetapi mendapatkan instans yang dimulai dari pekerjaan terjadwal.
Mulai pekerjaan latar belakang di komputer lokal.
PS> Start-Job -Name LocalData {Get-Process}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Running True localhost Get-Process
Mulai pekerjaan latar belakang yang berjalan pada komputer jarak jauh.
PS> Invoke-Command -ComputerName Server01 {Get-Process} `
-AsJob -JobName RemoteData
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 RemoteData RemoteJob Running True Server01 Get-Process
Membuat pekerjaan terjadwal
PS> Register-ScheduledJob -Name ScheduledJob -ScriptBlock `
{Get-Process} -Trigger (New-JobTrigger -Once -At "3 PM")
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True
Membuat alur kerja.
PS> workflow Test-Workflow {Get-Process}
Jalankan alur kerja sebagai pekerjaan.
PS> Test-Workflow -AsJob -JobName TestWFJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 TestWFJob PSWorkflowJob NotStarted True localhost Get-Process
Dapatkan pekerjaan. Perintah Get-Job
tidak mendapatkan pekerjaan terjadwal, tetapi mendapatkan instans pekerjaan terjadwal yang dimulai.
PS> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Completed True localhost Get-Process
4 RemoteData RemoteJob Completed True Server01 Get-Process
6 TestWFJob PSWorkflowJob Completed True localhost WorkflowJob
8 ScheduledJob PSScheduledJob Completed True localhost Get-Process
Untuk mendapatkan pekerjaan terjadwal, gunakan Get-ScheduledJob
cmdlet .
PS> Get-ScheduledJob
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True