PowerShell memiliki empat jenis pekerjaan - Pekerjaan Latar Belakang, Pekerjaan Jarak Jauh, Pekerjaan WMI dan Pekerjaan Terjadwal. Bergabunglah dengan kami saat kami mengetahui apa itu dan bagaimana kami dapat menggunakannya.
Pastikan untuk membaca artikel sebelumnya dalam rangkaian:
Dan nantikan terus sisa serial ini sepanjang minggu.
Sampai sekarang semua yang saya tunjukkan dalam PowerShell telah sinkron, artinya kita mengetikkan sesuatu ke dalam shell dan tidak bisa berbuat banyak sampai perintah selesai dijalankan. Di sinilah pekerjaan latar belakang masuk. Untuk memulai latar belakang, pekerjaan cukup melewati blok skrip ke cmdlet Start-Job.
Start-Job -Name GetFileList -Scriptblock Get-ChildItem C: \ -Recurse
Sekarang kita bebas melakukan apa pun yang kita inginkan di dalam shell saat blok skrip dijalankan di latar belakang.
Ketika Anda memulai pekerjaan baru, PowerShell membuat objek pekerjaan baru yang mewakili pekerjaan itu. Anda bisa mendapatkan daftar semua pekerjaan kapan saja dengan menjalankan cmdlet Get-Job.
Objek pekerjaan memberi tahu Anda tentang status pekerjaan. Sebagai contoh, dalam screenshot di atas kita dapat melihat bahwa kita memiliki BackgroundJob yang disebut GetFileList yang masih berjalan, tetapi sudah mulai mengembalikan data. Jika pada titik tertentu Anda memutuskan bahwa pekerjaan telah berjalan terlalu lama, Anda dapat dengan mudah menghentikannya dengan memipkannya ke Stop-Job.
Get-Job -Name GetFileList | Hentikan-Pekerjaan
Namun, setelah Anda menghentikan pekerjaan, data apa pun yang diterimanya hingga Anda menghentikannya masih tersedia. Ada gotcha. Di PowerShell, setelah Anda menerima hasil untuk suatu pekerjaan, mereka akan dihapus. Agar mereka tetap, Anda harus menentukan parameter saklar tetap dari Terima-Pekerjaan.
Get-Job -Name GetFileList | Terima-Pekerjaan -Jauhkan
Setelah Anda selesai dengan pekerjaan, itu adalah praktik terbaik untuk menghapusnya. Untuk menghapus pekerjaan, cukup menyalurkannya ke cmdlet Remove-Job.
Get-Job -Name GetFileList | Hapus-Pekerjaan
Ini akan menghapusnya dari daftar pekerjaan yang dikembalikan oleh Get-Job.
Beberapa pelajaran yang lalu, kami melihat bagaimana kami dapat menggunakan remoting untuk mengeksekusi perintah PowerShell pada mesin remote menggunakan Invoke-Command, tetapi apakah Anda tahu Anda juga dapat menggunakan Invoke-Command untuk memulai pekerjaan remoting di latar belakang? Untuk melakukannya, cukup tambahkan parameter -AsJob ke ujung perintah Anda:
Invoke-Command -ComputerName Flash, Viper -Credential administrator -ScriptBlock gci -AsJob
Itu adalah perintah sederhana dan seharusnya sudah selesai dieksekusi sekarang jadi mari kita lihat status pekerjaan kita.
Hmm, sepertinya gagal. Ini membawa saya pada gotcha pertama saya dengan pekerjaan. Saat Anda membuat pekerjaan baru jenis apa pun di PowerShell, ini akan membuat satu pekerjaan induk selain satu pekerjaan untuk setiap komputer yang Anda jalankan pekerjaannya. Saat Anda menggunakan cmdlet Get-Job, ini hanya menampilkan Anda pekerjaan induk, dan properti negara adalah skenario kasus terburuk, yang berarti bahwa bahkan jika perintah hanya gagal dijalankan pada satu dari seratus komputer, status pekerjaan orang tua akan mengatakan gagal. Untuk melihat daftar pekerjaan anak Anda perlu menggunakan parameter IncludeChildJob.
Jika Anda melihat lebih dekat, Anda akan melihat bahwa pekerjaan itu memang hanya gagal pada satu komputer, yang membawa kita ke gotcha berikutnya. Ketika Anda mencoba dan mendapatkan hasil untuk pekerjaan itu, jika Anda menentukan nama atau ID pekerjaan orang tua, PowerShell akan mengembalikan data dari semua pekerjaan anak. Masalahnya adalah jika ada kesalahan dalam salah satu pekerjaan anak, kita akan ditinggalkan dengan beberapa teks merah.
Ada dua cara untuk mengatasi hal ini. Pertama, jika Anda tahu komputer apa yang Anda inginkan hasilnya, Anda cukup menggunakan parameter ComputerName dari cmdlet Recieve -Job.
Dapatkan-Job -Id 3 | Terima-Pekerjaan -Jauhkan -ComputerName Viper
Atau, Anda bisa mendapatkan hasil dari pekerjaan anak tertentu menggunakan id pekerjaannya.
Dapatkan-Job -Id 3 -IncludeChildJob
Dapatkan-Job -Id 5 | Terima-Pekerjaan -Jauhkan
Pekerjaan WMI hampir sama dengan Pekerjaan Jarak Jauh, hanya membutuhkan parameter -AsJob yang akan ditambahkan ke cmdlet Get-WmiObject.
Sayangnya, ini berarti bahwa mereka juga tunduk pada gotha yang sama yang saya sebutkan di bagian Pekerjaan Jarak Jauh.
Tiga jenis pekerjaan terakhir yang kami lihat tidak persisten, yang berarti bahwa mereka hanya tersedia di sesi Anda saat ini. Pada dasarnya, itu berarti jika Anda memulai suatu pekerjaan dan kemudian membuka Konsol PowerShell lain dan menjalankan Get-Job, Anda tidak akan melihat pekerjaan apa pun. Namun, kembali ke konsol Anda menendang pekerjaan itu dari, Anda akan dapat melihat statusnya. Ini berbeda dengan Pekerjaan Terjadwal yang mana gigih. Pada dasarnya, Pekerjaan Terjadwal adalah blok skrip yang berjalan sesuai jadwal. Di masa lalu, pengaruh yang sama bisa dicapai menggunakan Windows Task Scheduler, yang benar-benar apa yang terjadi di bawah kap mesin. Untuk membuat Pekerjaan Terjadwal yang baru, kami melakukan hal berikut:
Register-DijadwalkanJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Rrigger (New-JobTrigger -Daily -In 5pm) -SjadwalkanJobOption (Baru-DijadwalkanJobOption -RunElevated)
Ada banyak hal yang terjadi dalam perintah itu, jadi mari kita hancurkan.
Karena ini adalah jenis pekerjaan yang sedikit berbeda, Anda juga perlu menggunakan perintah yang berbeda untuk mengambil daftar semua pekerjaan terjadwal pada mesin.
Dapatkan-JadwalJob
Hanya itu saja.