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
Menjelaskan cara menjalankan pekerjaan latar belakang pada komputer jarak jauh.
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 dalam sesi jarak jauh. -
BackgroundJob- Perintah dan skrip berjalan dalam proses terpisah pada komputer lokal. Untuk informasi selengkapnya, lihat about_Jobs. -
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 karena diteruskan antara sesi induk dan sesi jarak jauh (pekerjaan). 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.
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. Lihat bagian proses yang dilepas dari artikel ini. - Gunakan
Start-Processuntuk membuat proses baru daripada pekerjaan. Untuk informasi selengkapnya, lihat Proses Mulai.
Pekerjaan jarak jauh
Anda dapat menjalankan pekerjaan di komputer jarak jauh dengan menggunakan tiga metode berbeda.
Memulai sesi interaktif pada komputer jarak jauh. Kemudian mulai pekerjaan di sesi interaktif. Prosedurnya sama dengan menjalankan pekerjaan lokal, meskipun semua tindakan dilakukan pada komputer jarak jauh.
Jalankan pekerjaan pada komputer jarak jauh yang mengembalikan hasilnya ke komputer lokal. Gunakan metode ini ketika Anda ingin mengumpulkan hasil pekerjaan dan mempertahankannya di lokasi pusat di komputer lokal.
Jalankan pekerjaan pada komputer jarak jauh yang mempertahankan hasilnya pada komputer jarak jauh. Gunakan metode ini ketika data pekerjaan lebih aman dipertahankan pada komputer asal.
Memulai pekerjaan dalam sesi interaktif
Anda dapat memulai sesi interaktif dengan komputer jarak jauh lalu memulai pekerjaan selama sesi interaktif. Untuk informasi selengkapnya tentang sesi interaktif, lihat about_Remote, dan lihat Enter-PSSession.
Prosedur untuk memulai pekerjaan dalam sesi interaktif hampir identik dengan prosedur untuk memulai pekerjaan latar belakang di komputer lokal. Namun, semua operasi terjadi pada komputer jarak jauh, bukan komputer lokal.
Gunakan cmdlet
Enter-PSSessionuntuk memulai sesi interaktif dengan komputer jarak jauh. Anda dapat menggunakan parameter ComputerName dariEnter-PSSessionuntuk membuat koneksi sementara untuk sesi interaktif. Atau, Anda dapat menggunakan parameter Sesi untuk menjalankan sesi interaktif dalam sesi PowerShell (PSSession).Perintah berikut memulai sesi interaktif di komputer Server01.
C:\PS> Enter-PSSession -ComputerName Server01Perintah berubah untuk menunjukkan bahwa Anda sekarang tersambung ke komputer Server01.
Server01\C:>Untuk memulai pekerjaan jarak jauh dalam sesi, gunakan cmdlet
Start-Job. Perintah berikut menjalankan pekerjaan jarak jauh yang mendapatkan peristiwa di log peristiwa Windows PowerShell di komputer Server01. CmdletStart-Jobmengembalikan objek yang mewakili pekerjaan.Perintah ini menyimpan objek pekerjaan dalam variabel
$job.Server01\C:> $job = Start-Job -ScriptBlock { Get-EventLog "Windows PowerShell" }Saat pekerjaan berjalan, Anda dapat menggunakan sesi interaktif untuk menjalankan perintah lain, termasuk pekerjaan lain. Namun, Anda harus tetap membuka sesi interaktif hingga pekerjaan selesai. Jika Anda mengakhiri sesi, pekerjaan terganggu, dan hasilnya hilang.
Untuk mengetahui apakah pekerjaan selesai, tampilkan nilai variabel
$job, atau gunakan cmdletGet-Jobuntuk mendapatkan pekerjaan. Perintah berikut menggunakan cmdletGet-Jobuntuk menampilkan pekerjaan.Server01\C:> Get-Job $job SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Complete True localhost Get-EventLog "Windows...Output
Get-Jobmenunjukkan bahwa pekerjaan berjalan di komputer "localhost" karena pekerjaan dimulai dan berjalan pada komputer yang sama (dalam hal ini, Server01).Untuk mendapatkan hasil pekerjaan, gunakan cmdlet
Receive-Job. Anda dapat menampilkan hasilnya dalam sesi interaktif atau menyimpannya ke file di komputer jarak jauh. Perintah berikut mendapatkan hasil pekerjaan dalam variabel $job. Perintah menggunakan operator pengalihan (>) untuk menyimpan hasil pekerjaan dalam file PsLog.txt di komputer Server01.Server01\C:> Receive-Job $job > C:\logs\PsLog.txtUntuk mengakhiri sesi interaktif, gunakan cmdlet
Exit-PSSession. Perintah berubah untuk menunjukkan bahwa Anda kembali ke sesi asli di komputer lokal.Server01\C:> Exit-PSSession C:\PS>Untuk melihat isi file
PsLog.txtdi komputer Server01 kapan saja, mulai sesi interaktif lain, atau jalankan perintah jarak jauh. Jenis perintah ini paling baik dijalankan dalam PSSession (koneksi persisten) jika Anda ingin menggunakan beberapa perintah untuk menyelidiki dan mengelola data dalam filePsLog.txt. Untuk informasi selengkapnya tentang PSSessions, lihat about_PSSessions.Perintah berikut menggunakan cmdlet
New-PSSessionuntuk membuat PSSession yang tersambung ke komputer Server01, dan mereka menggunakan cmdletInvoke-Commanduntuk menjalankan perintahGet-Contentdi PSSession untuk melihat konten file.$s = New-PSSession -ComputerName Server01 Invoke-Command -Session $s -ScriptBlock { Get-Content C:\logs\pslog.txt}
Memulai pekerjaan jarak jauh yang mengembalikan hasil ke komputer lokal (AsJob)
Untuk memulai pekerjaan di komputer jarak jauh yang mengembalikan hasil perintah ke komputer lokal, gunakan parameter AsJob cmdlet seperti cmdlet Invoke-Command.
Ketika Anda menggunakan parameter AsJob, objek pekerjaan sebenarnya dibuat di komputer lokal meskipun pekerjaan berjalan di komputer jarak jauh. Ketika pekerjaan selesai, hasilnya dikembalikan ke komputer lokal.
Anda dapat menggunakan cmdlet yang berisi kata benda Pekerjaan (cmdlet Pekerjaan) untuk mengelola pekerjaan apa pun yang dibuat oleh cmdlet apa pun. Banyak cmdlet yang memiliki parameter AsJob tidak menggunakan jarak jauh PowerShell, sehingga Anda dapat menggunakannya bahkan pada komputer yang tidak dikonfigurasi untuk jarak jauh dan tidak memenuhi persyaratan untuk jarak jauh.
Perintah berikut menggunakan parameter AsJob
Invoke-Commanduntuk memulai pekerjaan di komputer Server01. Pekerjaan menjalankan perintahGet-Eventlogyang mendapatkan peristiwa di log Sistem. Anda dapat menggunakan parameter JobName untuk menetapkan nama tampilan ke pekerjaan.Invoke-Command -ComputerName Server01 -ScriptBlock { Get-EventLog System} -AsJobHasil perintah menyerupai contoh output berikut.
SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Running True Server01 Get-EventLog SystemSaat parameter AsJob digunakan,
Invoke-Commandmengembalikan jenis objek pekerjaan yang sama dengan yangStart-Jobkembalikan. Anda dapat menyimpan objek pekerjaan dalam variabel, atau Anda dapat menggunakan perintahGet-Jobuntuk mendapatkan pekerjaan.Perhatikan bahwa nilai properti Lokasi menunjukkan bahwa pekerjaan berjalan di komputer Server01.
Untuk mengelola pekerjaan yang dimulai dengan menggunakan parameter AsJob dari cmdlet
Invoke-Command, gunakan cmdlet Pekerjaan. Karena objek pekerjaan yang mewakili pekerjaan jarak jauh ada di komputer lokal, Anda tidak perlu menjalankan perintah jarak jauh untuk mengelola pekerjaan.Untuk menentukan apakah pekerjaan selesai, gunakan perintah
Get-Job. Perintah berikut mendapatkan semua pekerjaan yang dimulai dalam sesi saat ini.Get-JobKarena pekerjaan jarak jauh dimulai dalam sesi saat ini, perintah
Get-Joblokal mendapatkan pekerjaan. Properti Status objek pekerjaan menunjukkan bahwa perintah berhasil diselesaikan.SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Completed True Server01 Get-EventLog SystemUntuk mendapatkan hasil pekerjaan, gunakan cmdlet
Receive-Job. Karena hasil pekerjaan secara otomatis dikembalikan ke komputer tempat objek pekerjaan berada, Anda bisa mendapatkan hasilnya dengan perintahReceive-Joblokal.Perintah berikut menggunakan cmdlet
Receive-Jobuntuk mendapatkan hasil pekerjaan. Ini menggunakan ID sesi untuk mengidentifikasi pekerjaan. Perintah ini menyimpan hasil pekerjaan dalam variabel $results. Anda juga dapat mengalihkan hasil ke file.$results = Receive-Job -Id 1
Memulai pekerjaan jarak jauh yang menyimpan hasilnya di komputer jarak jauh
Untuk memulai pekerjaan di komputer jarak jauh yang menyimpan hasil perintah pada komputer jarak jauh, gunakan cmdlet Invoke-Command untuk menjalankan perintah Start-Job pada komputer jarak jauh. Anda dapat menggunakan metode ini untuk menjalankan pekerjaan pada beberapa komputer.
Saat Anda menjalankan perintah Start-Job dari jarak jauh, objek pekerjaan dibuat di komputer jarak jauh, dan hasil pekerjaan dipertahankan di komputer jarak jauh.
Dari perspektif pekerjaan, semua operasi bersifat lokal. Anda hanya menjalankan perintah dari jarak jauh untuk mengelola pekerjaan lokal di komputer jarak jauh.
Gunakan cmdlet
Invoke-Commanduntuk menjalankan perintahStart-Jobpada komputer jarak jauh.Perintah ini memerlukan PSSession (koneksi persisten). Jika Anda menggunakan parameter ComputerName
Invoke-Commanduntuk membuat koneksi sementara, perintahInvoke-Commanddianggap selesai saat objek pekerjaan dikembalikan. Akibatnya, koneksi sementara ditutup, dan pekerjaan dibatalkan.Perintah berikut menggunakan cmdlet
New-PSSessionuntuk membuat PSSession yang tersambung ke komputer Server01. Perintah menyimpan PSSession dalam variabel$s.$s = New-PSSession -ComputerName Server01Perintah berikutnya menggunakan cmdlet
Invoke-Commanduntuk menjalankan perintahStart-Jobdi PSSession. PerintahStart-Jobdan perintahGet-Eventlogdiapit kurung kurawal.Invoke-Command -Session $s -ScriptBlock { Start-Job -ScriptBlock {Get-EventLog System}}Hasilnya menyerupai contoh output berikut.
Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 Job2 Running True Localhost Get-EventLog SystemSaat Anda menjalankan perintah
Start-Jobdari jarak jauh,Invoke-Commandmengembalikan jenis objek pekerjaan yang sama dengan yangStart-Jobkembalikan. Anda dapat menyimpan objek pekerjaan dalam variabel, atau Anda dapat menggunakan perintahGet-Jobuntuk mendapatkan pekerjaan.Perhatikan bahwa nilai properti Lokasi menunjukkan bahwa pekerjaan berjalan di komputer lokal, yang dikenal sebagai "LocalHost", meskipun pekerjaan berjalan di komputer Server01. Karena objek pekerjaan dibuat pada komputer Server01 dan pekerjaan berjalan pada komputer yang sama, objek tersebut dianggap sebagai pekerjaan latar belakang lokal.
Untuk mengelola pekerjaan jarak jauh, gunakan cmdlet Pekerjaan. Karena objek pekerjaan berada di komputer jarak jauh, Anda perlu menjalankan perintah jarak jauh untuk mendapatkan, menghentikan, menunggu, atau mengambil hasil pekerjaan.
Untuk melihat apakah pekerjaan selesai, gunakan perintah
Invoke-Commanduntuk menjalankan perintahGet-Jobdi PSSession yang tersambung ke komputer Server01.Invoke-Command -Session $s -ScriptBlock {Get-Job}Perintah mengembalikan objek pekerjaan. Properti Status dari objek pekerjaan menunjukkan bahwa perintah berhasil diselesaikan.
SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 2 Job2 Completed True LocalHost Get-EventLog SystemUntuk mendapatkan hasil pekerjaan, gunakan cmdlet
Invoke-Commanduntuk menjalankan perintahReceive-Jobdi PSSession yang tersambung ke komputer Server01.Perintah berikut menggunakan cmdlet
Receive-Jobuntuk mendapatkan hasil pekerjaan. Ini menggunakan ID sesi untuk mengidentifikasi pekerjaan. Perintah ini menyimpan hasil pekerjaan dalam variabel$results. Ini menggunakan parameter KeepReceive-Jobuntuk menyimpan hasilnya dalam cache pekerjaan di komputer jarak jauh.$results = Invoke-Command -Session $s -ScriptBlock { Receive-Job -SessionId 2 -Keep }Anda juga dapat mengalihkan hasil ke file di komputer lokal atau jarak jauh. Perintah berikut menggunakan operator pengalihan untuk menyimpan hasil dalam file di komputer Server01.
Invoke-Command -Session $s -Command { Receive-Job -SessionId 2 > C:\logs\pslog.txt }
Cara menjalankan sebagai proses yang dilepas
Seperti yang disebutkan sebelumnya, ketika sesi induk dihentikan, semua pekerjaan turunan yang berjalan dihentikan bersama dengan proses anak mereka. Anda dapat menggunakan jarak jauh pada komputer lokal untuk menjalankan pekerjaan yang tidak dilampirkan ke sesi PowerShell saat ini.
Buat sesi PowerShell baru di komputer lokal. Penggunaan Invoke-Command untuk memulai pekerjaan dalam sesi ini.
Invoke-Command memungkinkan Anda memutuskan sambungan sesi jarak jauh dan mengakhiri sesi induk. Nantinya, Anda dapat memulai sesi PowerShell baru dan menyambungkan ke sesi yang sebelumnya terputus untuk melanjutkan pemantauan pekerjaan. Namun, data apa pun yang dikembalikan ke sesi PowerShell asli hilang ketika sesi tersebut dihentikan. Hanya objek data baru yang dihasilkan setelah pemutusan sambungan dikembalikan saat tersambung kembali.
# Create remote session on local machine
PS> $session = New-PSSession -Cn localhost
# Start remote job
PS> $job = Invoke-Command -Session $session -ScriptBlock { 1..60 | % { sleep 1; "Output $_" } } -AsJob
PS> $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Running True localhost 1..60 | % { sleep 1; ...
# Disconnect the job session
PS> Disconnect-PSSession $session
Id Name Transport ComputerName ComputerType State ConfigurationName Availability
-- ---- --------- ------------ ------------ ----- ----------------- ------------
1 Runspace1 WSMan localhost RemoteMachine Disconnected Microsoft.PowerShell None
PS> $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Disconnected True localhost 1..60 | % { sleep 1;
# Reconnect the session to a new job object
PS> $jobNew = Receive-PSSession -Session $session -OutTarget Job
PS> $job | Wait-Job | Receive-Job
Output 9
Output 10
Output 11
...
Untuk contoh ini, pekerjaan masih dilampirkan ke sesi PowerShell induk.
Namun, sesi induk bukan sesi PowerShell asli tempat Invoke-Command dijalankan.
Lihat juga
- about_Jobs
- about_Job_Details
- about_Remote
- about_Remote_Variables
- Perintah Panggilan
- Get-Job
- Remove-Job
- Start-Job
- Stop-Job
- Wait-Job
- Enter-PSSession
- Exit-PSSession
- New-PSSession