Geek School Pelajari Cara Menggunakan Pekerjaan di PowerShell
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 seri ini:
- Pelajari Cara Mengotomatiskan Windows dengan PowerShell
- Belajar Menggunakan Cmdlet di PowerShell
- Mempelajari Cara Menggunakan Objek di PowerShell
- Belajar Memformat, Memfilter, dan Membandingkan di PowerShell
- Belajar Menggunakan Remoting di PowerShell
- Menggunakan PowerShell untuk Mendapatkan Informasi Komputer
- Bekerja dengan Koleksi di PowerShell
Dan tetap disini selama sisa seri sepanjang minggu.
Pekerjaan Latar Belakang
Sampai sekarang semua yang saya tunjukkan kepada Anda di dalam PowerShell telah disinkronkan, artinya kami mengetik sesuatu ke dalam shell dan tidak bisa berbuat banyak sampai perintah itu selesai dijalankan. Di sinilah pekerjaan latar belakang masuk. Untuk memulai latar belakang, pekerjaan cukup melewati blok skrip ke cmdlet Mulai-Pekerjaan.
Start-Job -Nama GetFileList -Scriptblock Get-ChildItem C: \ -Recurse
Sekarang kita bebas melakukan apa pun yang kita inginkan di dalam shell sementara blok skrip dijalankan di latar belakang.
Saat 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. Misalnya, dalam tangkapan layar di atas kita dapat melihat bahwa kita memiliki BackgroundJob yang disebut GetFileList yang masih berjalan, tetapi sudah mulai mengembalikan data. Jika suatu saat Anda memutuskan bahwa pekerjaan itu sudah berjalan terlalu lama, Anda dapat dengan mudah menghentikannya dengan mengirimkannya ke Stop-Job.
Get-Job -Name GetFileList | Stop-Job
Namun, begitu Anda telah menghentikan suatu pekerjaan, data apa pun yang diterimanya hingga titik Anda berhenti itu masih tersedia. Tapi ada gotcha. Di PowerShell, setelah Anda menerima hasil untuk suatu pekerjaan, mereka akan dihapus. Agar mereka tetap, Anda harus menentukan parameter keep switch dari Receive-Job.
Get-Job -Name GetFileList | Terima-Pekerjaan -Tetap
Setelah Anda selesai dengan pekerjaan, praktik terbaik adalah menghapusnya. Untuk menghapus pekerjaan, cukup pipa ke cmdlet Hapus-Pekerjaan.
Get-Job -Name GetFileList | Hapus-Pekerjaan
Ini akan menghapusnya dari daftar pekerjaan yang dikembalikan oleh Get-Job.
Pekerjaan Jarak Jauh
Beberapa pelajaran yang lalu, kami melihat bagaimana kami dapat menggunakan remoting untuk mengeksekusi perintah PowerShell pada mesin jarak jauh 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 di akhir perintah Anda:
Invoke-Command -ComputerName Flash, Viper -Administrator kredensial -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 ke gotcha pertama saya dengan pekerjaan. Saat Anda membuat pekerjaan baru dari jenis apa pun di PowerShell, itu menciptakan satu pekerjaan orang tua selain satu pekerjaan anak untuk setiap komputer yang Anda lawan. Ketika Anda menggunakan cmdlet Get-Job, itu hanya menunjukkan kepada Anda pekerjaan orang tua, dan properti negara adalah skenario kasus terburuk, yang berarti bahwa bahkan jika perintah hanya gagal dijalankan pada satu dari seratus komputer, negara bagian pekerjaan induk akan mengatakan gagal. Untuk melihat daftar pekerjaan anak-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. Saat Anda mencoba dan mendapatkan hasil untuk pekerjaan itu, jika Anda menentukan nama pekerjaan orang tua atau ID, PowerShell akan mengembalikan data dari semua pekerjaan anak. Masalahnya adalah jika ada kesalahan dalam salah satu pekerjaan anak, kita akan dibiarkan dengan beberapa teks merah.
Ada dua cara untuk mengatasi ini. Pertama, jika Anda tahu komputer apa yang Anda inginkan hasilnya, Anda cukup menggunakan parameter ComputerName dari cmdlet Recieve -Job.
Dapatkan-Pekerjaan -Id 3 | Terima-Pekerjaan -Jauhkan -Nama Komputer Viper
Atau, Anda bisa mendapatkan hasil dari pekerjaan anak tertentu menggunakan id pekerjaannya.
Dapatkan-Pekerjaan -Id 3 -TermasukChildJob
Dapatkan-Pekerjaan -Id 5 | Terima-Pekerjaan -Tetap
Pekerjaan WMI
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 gotcha yang sama yang saya sebutkan di bagian Remote Jobs.
Pekerjaan Terjadwal
Tiga jenis pekerjaan terakhir yang kami lihat tidak persisten, artinya hanya tersedia di sesi Anda saat ini. Pada dasarnya, itu berarti jika Anda memulai pekerjaan dan kemudian membuka PowerShell Console lain dan menjalankan Get-Job, Anda tidak akan melihat pekerjaan apa pun. Namun, kembali ke konsol tempat Anda memulai pekerjaan, Anda akan dapat melihat statusnya. Ini berbeda dengan Pekerjaan Terjadwal yang gigih. Pada dasarnya, Pekerjaan Terjadwal adalah blok skrip yang berjalan sesuai jadwal. Di masa lalu, pengaruh yang sama bisa dicapai dengan menggunakan Penjadwal Tugas Windows, yang benar-benar apa yang terjadi di bawah tenda. Untuk membuat Pekerjaan Terjadwal baru, kami melakukan hal berikut:
Registrasi -Jadwal Terjadwal -Nama GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Trigger (New-JobTrigger -Daily -At 5pm) -JadwalJobOption (New-ScheduledJobOption -RunElevated)
Ada cukup banyak hal yang terjadi dalam perintah itu, jadi mari kita jabarkan.
- Pertama, kami memberi Pekerjaan Terjadwal kami nama GetEventLogs.
- Kami kemudian mengatakan bahwa ketika dipicu, kami ingin menjalankan konten dari blok skrip yang ditentukan, yang pada dasarnya mendapatkan 100 entri terbaru dari log peristiwa Keamanan.
- Selanjutnya, kami menentukan pemicu. Karena parameter pemicu mengambil objek pemicu sebagai input, kami menggunakan perintah tanda kurung untuk menghasilkan pemicu yang akan padam setiap hari pada pukul 17:00..
- Karena kita berurusan dengan log peristiwa, kita perlu menjalankan sebagai administrator, yang dapat kita tentukan dengan membuat objek ScheduledJobOption baru dan meneruskannya ke parameter ScheduledJobOption.
Karena ini adalah jenis pekerjaan yang sedikit berbeda, Anda juga perlu menggunakan perintah yang berbeda untuk mengambil daftar semua pekerjaan yang dijadwalkan pada mesin..
Dapatkan-Dijadwalkan Pekerjaan
Itu semua yang ada untuk itu.