If-Koubou

Geek School: Pelajari Cara Menggunakan Pekerjaan di PowerShell

Geek School: Pelajari Cara Menggunakan Pekerjaan di PowerShell (Bagaimana caranya)

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:

  • Pelajari Cara Mengotomatiskan Windows dengan PowerShell
  • Belajar Menggunakan Cmdlet di PowerShell
  • Mempelajari Cara Menggunakan Objek di PowerShell
  • Belajar Memformat, Memfilter dan Membandingkan dalam PowerShell
  • Belajar Menggunakan Remoting di PowerShell
  • Menggunakan PowerShell untuk Mendapatkan Informasi Komputer
  • Bekerja dengan Koleksi di PowerShell

Dan nantikan terus sisa serial ini sepanjang minggu.

Pekerjaan Latar Belakang

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.

Pekerjaan Jarak Jauh

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

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.

Pekerjaan Terjadwal

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.

  • Pertama, kami memberikan Job Terjadwal kami nama GetEventLogs.
  • Kami kemudian mengatakan bahwa ketika dipicu, kami ingin menjalankan konten blok skrip yang ditentukan, yang pada dasarnya mendapat 100 entri terbaru dari log kejadian Keamanan.
  • Selanjutnya, kami tentukan pemicu.Karena parameter pemicu mengambil objek pemicu sebagai input, kami menggunakan perintah parenthetical untuk menghasilkan pemicu yang akan mati setiap hari pada jam 5 sore.
  • Karena kita berurusan dengan event log, kita perlu menjalankan sebagai administrator, yang dapat kita tentukan dengan membuat objek ScheduledJobOption yang 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 terjadwal pada mesin.

Dapatkan-JadwalJob

Hanya itu saja.