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 beberapa Start-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

Lihat juga