Geek School: Ketahui Cara Menggunakan Pekerjaan dalam PowerShell

Isi kandungan:

Geek School: Ketahui Cara Menggunakan Pekerjaan dalam PowerShell
Geek School: Ketahui Cara Menggunakan Pekerjaan dalam PowerShell
Anonim

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

Imej
Imej

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.

Imej
Imej

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.

Imej
Imej

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.

Imej
Imej

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.

Imej
Imej

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:

Imej
Imej

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

Imej
Imej

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.

Imej
Imej

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.

Imej
Imej

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.

Imej
Imej

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

Imej
Imej
Imej
Imej

WMI Jobs

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

Imej
Imej
Imej
Imej

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.
Imej
Imej

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.

Imej
Imej

Itu sahaja yang ada.

Topik popular.