Sekolah Geek Ketahui Cara Menggunakan Pekerjaan di PowerShell
PowerShell mempunyai empat jenis pekerjaan - Pekerjaan Latar Belakang, Pekerjaan Jauh, Pekerjaan WMI dan Pekerjaan Berjadual. Sertai kami ketika kami mengetahui apa yang mereka dan bagaimana kami boleh menggunakannya.
Pastikan anda membaca artikel sebelumnya dalam siri ini:
- Ketahui Bagaimana Mengotomatikkan Windows dengan PowerShell
- Belajar Menggunakan Cmdlets di PowerShell
- Belajar Cara Menggunakan Objek di PowerShell
- Pemformatan Pembelajaran, Penapisan dan Pembandingan di PowerShell
- Belajarlah Menggunakan Remoting dalam PowerShell
- Menggunakan PowerShell untuk Dapatkan Maklumat Komputer
- Bekerja dengan Koleksi di PowerShell
Dan tunggu selama siri sepanjang minggu.
Pekerjaan Latar Belakang
Hingga sekarang semua yang saya telah menunjukkan kepada anda dalam PowerShell telah menjadi segerak, bererti kita menaip sesuatu ke dalam shell dan tidak boleh melakukan banyak sehingga perintah itu selesai dilaksanakan. Inilah tempat pekerjaan latar belakang masuk. Untuk memulakan latar belakang, kerja hanya lulus blok skrip ke cmdlet Mula-Kerja.
Start-Job -Name GetFileList -Scriptblock Get-ChildItem C: \ -Recurse
Sekarang kita bebas melakukan apa sahaja yang kita mahu dalam shell semasa blok skrip dilaksanakan di latar belakang.
Apabila anda memulakan tugas baru, PowerShell mencipta objek kerja baru yang mewakili tugas itu. Anda boleh mendapatkan senarai semua pekerjaan pada bila-bila masa dengan menjalankan cmdlet Get-Job.
Objek kerja memberitahu anda tentang status pekerjaan. Sebagai contoh, dalam tangkapan skrin di atas, kita dapat melihat bahawa kita mempunyai BackgroundJob yang dikenali sebagai GetFileList yang masih berjalan, tetapi sudah mula memulangkan data. Jika pada bila-bila masa anda membuat keputusan bahawa pekerjaan telah berlarutan terlalu lama, anda boleh dengan mudah menghentikannya dengan menipunya ke Stop-Job.
Get-Job -Name GetFileList | Stop-Job
Walau bagaimanapun, sebaik sahaja anda berhenti kerja, apa sahaja data yang diterima sehingga titik yang anda berhenti itu masih ada. Terdapat sebuah gotcha, walaupun. Dalam PowerShell, sebaik sahaja anda menerima keputusan untuk pekerjaan, mereka akan dipadam. Agar mereka kekal, anda mesti menentukan parameter suis terus dari Receive-Job.
Get-Job -Name GetFileList | Terima-Job-Keamanan
Sebaik sahaja anda selesai dengan pekerjaan, amalan terbaik untuk membuangnya. Untuk mengalih keluar tugas itu, hanya paip ke cmdlet Remove-Job.
Get-Job -Name GetFileList | Hapuskan Kerja
Ini akan mengeluarkannya daripada senarai pekerjaan yang dikembalikan oleh Get-Job.
Pekerjaan 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 remoting di latar belakang? Untuk melakukannya, cukup tambah parameter -AsJob ke hujung arahan anda:
Invoke-Command -ComputerName Flash, Viper -Credential administrator -ScriptBlock gci -AsJob
Itulah arahan yang mudah dan sepatutnya telah selesai dilaksanakan sekarang jadi mari lihatlah status pekerjaan kami.
Hmm, nampaknya gagal. Ini membawa saya ke gotcha pertama saya dengan pekerjaan. Apabila anda mencipta tugas baru dalam mana-mana jenis dalam PowerShell, ia mewujudkan satu pekerjaan induk sebagai tambahan kepada satu pekerjaan kanak-kanak untuk setiap komputer yang anda menjalankan tugas itu. Apabila anda menggunakan cmdlet Get-Job, ia hanya menunjukkan pekerjaan ibu bapa dan harta negara adalah senario kes yang paling teruk, yang bermaksud bahawa walaupun perintah itu hanya gagal berjalan di satu daripada seratus komputer, keadaan kerja ibu bapa akan berkata gagal. Untuk melihat senarai pekerjaan kanak-kanak, anda perlu menggunakan parameter TermasukChildJob.
Sekiranya anda melihat lebih dekat, anda akan melihat bahawa tugas sememangnya gagal pada satu komputer, yang membawa kami ke gotcha seterusnya. Apabila anda mencuba dan mendapatkan hasil kerja, jika anda menentukan nama atau nama kerja ibu bapa, PowerShell akan mengembalikan data dari semua pekerjaan kanak-kanak. Masalahnya ialah jika ada kesilapan dalam salah satu pekerjaan kanak-kanak, kita akan ditinggalkan dengan beberapa teks merah.
Terdapat dua cara untuk mendapatkan sekitar ini. Pertama, jika anda tahu komputer apa yang anda inginkan, anda boleh menggunakan parameter ComputerName dari cmdlet Recieve-Job.
Get-Job -Id 3 | Menerima-Job -Keep -ComputerName Viper
Sebagai alternatif, anda boleh mendapatkan hasil dari pekerjaan anak tertentu menggunakan id pekerjaannya.
Get-Job -Id 3 -IncludeChildJob
Get-Job -Id 5 | Terima-Job-Keamanan
Pekerjaan WMI
Pekerjaan WMI adalah sama seperti Remote Jobs, yang memerlukan hanya parameter -AsJob yang akan ditambah kepada cmdlet Get-WmiObject.
Malangnya, ini bermakna bahawa mereka juga tertakluk kepada gotchas yang sama yang saya nyatakan di bahagian Pekerjaan Jauh.
Pekerjaan Berjadual
Tiga pekerjaan terakhir yang kami lihat tidak berterusan, yang bermaksud bahawa mereka hanya tersedia dalam sesi semasa anda. Pada dasarnya, ini bermakna jika anda memulakan tugas dan kemudian membuka PowerShell Console yang lain dan menjalankan Get-Job, anda tidak akan melihat sebarang pekerjaan. Walau bagaimanapun, kembali ke konsol anda menendang pekerjaan dari, anda akan dapat melihat statusnya. Ini berbeza dengan Pekerjaan Berjadual yang mana berterusan. Pada asasnya, Kerja Berjadual adalah blok skrip yang berjalan pada jadual. Pada masa lalu, kesan yang sama dapat dicapai dengan menggunakan Penjadual Tugas Windows, yang benar-benar terjadi di bawah tudung. Untuk membuat Kerja Berjadual baru, kami lakukan perkara berikut:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Trigger (New-JobTrigger-Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
Terdapat banyak perkara yang berlaku di dalam arahan itu, jadi mari memecahkannya.
- Pertama, kami memberikan Job Scheduled kepada nama GetEventLogs.
- Kami kemudian menceritakan bahawa apabila dicetuskan, kami mahu ia menjalankan kandungan blok skrip yang dinyatakan, yang pada dasarnya mendapat 100 entri terbaru dalam log peristiwa Keselamatan.
- Seterusnya, kami menentukan pencetus. Oleh kerana parameter pencetus mengambil objek pencetus sebagai input, kami menggunakan perintah arahan untuk menghasilkan pencetus yang akan hilang setiap hari pada 5 petang.
- Oleh kerana kita berurusan dengan log peristiwa, kita perlu berjalan sebagai pentadbir, yang boleh kita tentukan dengan membuat objek ScheduledJobOption yang baru dan lulusnya ke parameter ScheduledJobOption.
Oleh kerana ini adalah jenis kerja yang sedikit berbeza, anda juga perlu menggunakan arahan yang berbeza untuk mendapatkan senarai semua kerja yang dijadualkan pada mesin.
Get-ScheduledJob
Itulah yang ada padanya.