29Aug

Geek School: Pelajari Cara Menggunakan Pekerjaan di PowerShell

click fraud protection

PowerShell memiliki empat jenis pekerjaan - Latar Belakang Pekerjaan, Pekerjaan Jarak Jauh, Pekerjaan WMI dan Pekerjaan Terjadwal. Bergabunglah dengan kami saat kami mengetahui apa itu dan bagaimana kami bisa menggunakannya.

Pastikan untuk membaca artikel sebelumnya dalam seri:

  • Pelajari Cara Mengotomatiskan Windows dengan PowerShell
  • Belajar Menggunakan Cmdlet di PowerShell
  • Belajar Cara Menggunakan Objek di PowerShell
  • Mempelajari Format, Penyaringan dan Pembandingan di PowerShell
  • Belajar Menggunakan Remoting diPowerShell
  • Menggunakan PowerShell untuk Mendapatkan Informasi Komputer
  • Bekerja dengan Koleksi di PowerShell

Dan tetap mengikuti seri sepanjang minggu ini.

Latar Belakang Pekerjaan

Sampai sekarang semua yang telah saya tunjukkan kepada Anda di dalam PowerShell telah sinkron, yang berarti bahwa kita mengetik sesuatu ke dalam shell dan tidak dapat benar-benar berbuat banyak sampai perintah tersebut selesai dijalankan. Di sinilah pekerjaan latar belakang masuk. Untuk memulai latar belakang, pekerjaan hanya melewati blok naskah ke cmdlet Start-Job.

instagram viewer

Start-Job -Name GetFileList -Scriptblock{ Get-ChildItem C: \ -Recurse}

Sekarang kita bebas melakukan apapun yang kita inginkan dalam shell sementara blok script dijalankan di latar belakang.

Ketika Anda memulai pekerjaan baru, PowerShell menciptakan objek pekerjaan baru yang mewakili pekerjaan itu. Anda bisa mendapatkan daftar semua pekerjaan kapan saja dengan menjalankan cmdlet Get-Job.

Objek pekerjaan memberitahu Anda tentang status pekerjaan. Sebagai contoh, pada screenshot di atas kita dapat melihat bahwa kita memiliki BackgroundJob yang disebut GetFileList yang masih berjalan, namun sudah mulai mengembalikan data. Jika pada suatu saat Anda memutuskan bahwa pekerjaan telah berjalan terlalu lama, Anda dapat dengan mudah menghentikannya dengan menyalurkannya ke Stop-Job.

Get-Job -Name GetFileList |Stop-Job

Namun, setelah Anda menghentikan pekerjaan, data apa pun yang diterima sampai titik yang Anda hentikan itu masih tersedia. Ada gotcha, meskipun. Di PowerShell, setelah Anda menerima hasil untuk sebuah pekerjaan, mereka akan terhapus. Agar mereka tetap tinggal, Anda harus menentukan parameter keep switch dari Receive-Job.

Get-Job -Name GetFileList |Receive-Job -Keep

Setelah Anda selesai dengan pekerjaan, praktik terbaik adalah membuangnya. Untuk menghapus pekerjaan itu, cukup sambungkan ke cmdlet Remove-Job.

Get-Job -Name GetFileList |Remove-Job

Ini akan menghapusnya dari daftar pekerjaan yang dikembalikan oleh Get-Job.

Remote Jobs

Beberapa pelajaran yang lalu, kami melihat bagaimana kami dapat menggunakan Remoting untuk menjalankan perintah PowerShell di komputer jarak jauh menggunakan Invoke-Command, namun Anda tahu Anda juga dapat menggunakan Invoke-Command untuk memulai pekerjaan pemungutan suara di latar belakang.?Untuk melakukannya, cukup tambahkan parameter -AsJob ke akhir perintah Anda:

Invoke-Command -ComputerName Flash, Viper -Credential administrator -ScriptBlock{ gci} -AsJob

Itu adalah perintah sederhana dan seharusnya selesai dijalankan sekarang juga.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, ini akan menciptakan satu pekerjaan orang tua selain satu pekerjaan anak untuk setiap komputer yang menjalankan tugas Anda. Bila Anda menggunakan cmdlet Get-Job, ini hanya menunjukkan pekerjaan orang tua, dan properti negara adalah skenario kasus terburuk, yang berarti bahwa bahkan jika perintah tersebut hanya gagal berjalan di satu dari seratus komputer, negara bagian induk pekerjaan akan mengatakangagal. 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 hadcha berikutnya. Saat Anda mencoba dan mendapatkan hasilnya untuk pekerjaan itu, jika Anda menentukan nama pekerjaan atau ID orang tua, PowerShell akan mengembalikan data dari semua pekerjaan anak. Masalahnya adalah bahwa jika ada kesalahan dalam salah satu pekerjaan anak, kita akan ditinggalkan dengan teks merah.

Ada dua cara untuk mengatasi hal ini. Pertama, jika Anda tahu komputer apa yang Anda inginkan hasilnya, Anda bisa menggunakan parameter ComputerName dari cmdlet Recink -Job.

Get-Job -Id 3 |Menerima-Job -Keep -ComputerName Viper

Sebagai alternatif, Anda bisa mendapatkan hasil dari pekerjaan anak tertentu dengan menggunakan id pekerjaannya.

Get-Job -Id 3 -IncludeChildJob

Get-Job -Id 5 |Menerima-Job -Keep

WMI Jobs

Pekerjaan WMI

sama dengan Remote Jobs, hanya membutuhkan parameter -AsJob untuk ditambahkan ke cmdlet Get-WmiObject.

Sayangnya, ini berarti bahwa mereka juga tunduk pada gotchas yang sama seperti yang saya sebutkan di bagian Remote Jobs.

Pekerjaan Terjadwal

Tiga jenis pekerjaan terakhir yang kami lihat tidak terus-menerus, artinya hanya tersedia dalam sesi Anda saat ini. Pada dasarnya, itu berarti jika Anda memulai pekerjaan dan kemudian membuka Konsol PowerShell lainnya 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 Scheduled Jobs yang adalah yang gigih. Pada dasarnya, Pekerjaan yang Dijadwalkan adalah blok naskah yang berjalan sesuai jadwal. Di masa lalu, pengaruhnya yang sama bisa dicapai dengan menggunakan Windows Task Scheduler, yang sebenarnya apa yang terjadi di balik kap mesin. Untuk membuat Job Scheduled yang baru, kami melakukan hal berikut:

Register-ScheduledJob -Name GetEventLogs -ScriptBlock{ Get-EventLog -LogName Security -Newest 100} -Trigger( New-JobTrigger -Daily -At 5pm) -ScheduledJobOption( New-ScheduledJobOption-RunElevated)

Ada banyak hal yang terjadi dalam perintah itu, jadi ayo kita turunkan.

  • Pertama, kami memberi Job Scheduled kami nama GetEventLogs.
  • Kami kemudian mengatakan bahwa ketika dipicu, kami ingin menjalankan isi blok skrip yang ditentukan, yang pada dasarnya mendapatkan 100 entri terbaru dari log peristiwa keamanan.
  • Selanjutnya, kita tentukan pemicu. Karena parameter pemicu mengambil objek pemicu sebagai masukan, kami menggunakan perintah parenthetical untuk menghasilkan pemicu yang akan dimatikan setiap hari pada pukul 5 sore.
  • Karena kita berurusan dengan event log, 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 terjadwal pada mesin.

Get-ScheduledJob

Itu saja yang ada untuk itu.