Kini kami bebas melakukan apa sahaja yang kami mahu dalam shell sementara blok skrip itu dilaksanakan di latar belakang.

Apabila anda memulakan kerja baharu, PowerShell mencipta objek kerja baharu yang mewakili tugas tersebut. Anda boleh mendapatkan senarai semua kerja pada bila-bila masa dengan menjalankan cmdlet Get-Job.

Objek pekerjaan memberitahu anda tentang status pekerjaan. Sebagai contoh, dalam tangkapan skrin di atas kita dapat melihat bahawa kita mempunyai BackgroundJob yang dipanggil GetFileList yang masih berjalan, tetapi telah mula mengembalikan data. Jika pada bila-bila masa anda memutuskan bahawa kerja itu telah berjalan terlalu lama, anda boleh menghentikannya dengan mudah dengan menyalurkannya ke Stop-Job.

Walau bagaimanapun, sebaik sahaja anda menghentikan kerja, apa sahaja data yang diterima sehingga anda menghentikannya masih tersedia. Terdapat gotcha, walaupun. Dalam PowerShell, sebaik sahaja anda menerima keputusan untuk sesuatu kerja, ia akan dipadamkan. Agar mereka kekal, anda mesti menentukan parameter suis simpan bagi Terima–Pekerjaan.

Setelah anda selesai dengan sesuatu kerja, adalah amalan terbaik untuk mengalih keluarnya. Untuk mengalih keluar kerja, hanya paipkannya ke cmdlet Remove-Job.
Ini akan mengalih keluarnya daripada senarai kerja yang dikembalikan oleh Get-Job.

Kerja Jauh
Beberapa pelajaran yang lalu, kami melihat bagaimana kami boleh menggunakan remoting untuk melaksanakan perintah PowerShell pada mesin jauh menggunakan Invoke-Command, tetapi adakah anda tahu anda juga boleh menggunakan Invoke-Command untuk memulakan kerja removing dalam latar belakang? Untuk berbuat demikian, hanya tambahkan parameter –AsJob pada penghujung arahan anda:

Itu perintah mudah dan sepatutnya sudah selesai dilaksanakan sekarang jadi mari lihat status pekerjaan kita.

Hmm, nampaknya gagal. Ini membawa saya ke gotcha pertama saya dengan pekerjaan. Apabila anda membuat kerja baharu dalam apa-apa jenis dalam PowerShell, ia mewujudkan satu kerja induk sebagai tambahan kepada satu kerja anak untuk setiap komputer yang anda gunakan untuk menjalankan tugas itu. Apabila anda menggunakan cmdlet Get-Job, ia hanya menunjukkan kepada anda pekerjaan induk dan harta negeri ialah senario kes terburuk, bermakna walaupun arahan itu hanya gagal dijalankan pada satu daripada seratus komputer, keadaan pekerjaan induk akan berkata gagal. Untuk melihat senarai pekerjaan kanak-kanak, anda perlu menggunakan parameter IncludeChildJob.

Jika anda melihat lebih dekat, anda akan melihat bahawa kerja itu sememangnya gagal pada satu komputer, yang membawa kita ke gotcha seterusnya. Apabila anda mencuba dan mendapatkan keputusan untuk kerja itu, jika anda menyatakan nama kerja atau ID ibu bapa, PowerShell akan mengembalikan data daripada semua kerja anak. Masalahnya ialah jika terdapat ralat dalam salah satu tugas kanak-kanak, kita akan ditinggalkan dengan beberapa teks merah.

Terdapat dua cara untuk mengatasi masalah ini. Pertama, jika anda tahu komputer yang anda inginkan hasilnya, anda boleh menggunakan parameter ComputerName bagi cmdlet Recieve –Job.

Sebagai alternatif, anda boleh mendapatkan hasil daripada pekerjaan anak tertentu menggunakan id tugasnya.


WMI Jobs
WMI Jobs adalah sama seperti Remote Jobs, hanya memerlukan parameter –AsJob untuk ditambahkan pada cmdlet Get-WmiObject.


Malangnya, ini bermakna mereka juga tertakluk kepada gotcha yang sama yang saya nyatakan dalam bahagian Pekerjaan Jauh.
Kerja Berjadual
Tiga jenis pekerjaan terakhir yang kami lihat tidak berterusan, bermakna ia hanya tersedia dalam sesi semasa anda. Pada asasnya, ini bermakna jika anda memulakan kerja dan kemudian membuka Konsol PowerShell lain dan menjalankan Get-Job, anda tidak akan melihat sebarang pekerjaan. Walau bagaimanapun, kembali ke konsol tempat anda memulakan tugas itu, anda akan dapat melihat statusnya. Ini berbeza dengan Kerja Berjadual yang berterusan Pada asasnya, Kerja Berjadual ialah blok skrip yang berjalan mengikut jadual. Pada masa lalu, kesan yang sama boleh dicapai menggunakan Penjadual Tugas Windows, yang sebenarnya adalah apa yang berlaku di bawah hud. Untuk membuat Kerja Berjadual baharu, kami melakukan perkara berikut:
Terdapat banyak perkara yang berlaku dalam perintah itu, jadi mari kita patahkan.
- Pertama, kami memberikan Jawatan Berjadual kami nama GetEventLogs.
- Kami kemudian memberitahunya bahawa apabila dicetuskan, kami mahu ia menjalankan kandungan blok skrip yang ditentukan, yang pada asasnya mendapat 100 entri terbaru log peristiwa Keselamatan.
- Seterusnya, kami menentukan pencetus. Memandangkan parameter pencetus mengambil objek pencetus sebagai input, kami menggunakan perintah kurungan untuk menjana pencetus yang akan berbunyi setiap hari pada pukul 5 petang.
- Memandangkan kami berurusan dengan log peristiwa, kami perlu menjalankan sebagai pentadbir, yang boleh kami tentukan dengan mencipta objek ScheduledJobOption baharu dan menghantarnya ke parameter ScheduledJobOption.

Memandangkan ini adalah jenis kerja yang sedikit berbeza, anda juga perlu menggunakan perintah yang berbeza untuk mendapatkan semula senarai semua kerja yang dijadualkan pada mesin.

Itu sahaja yang ada.