29Aug

Geek Okulu: PowerShell'de İşleri Nasıl Kullanacağınızı Öğrenin

click fraud protection

PowerShell'in dört işi vardır: Arka Plan İşleri, Uzak İşler, WMI İşleri ve Zamanlanmış İşler. Neler olduklarını ve bunları nasıl kullanacağımızı öğrenirken bize katılın.

Serideki önceki makaleleri okuduğunuzdan emin olun:

  • Windows'u PowerShell ile Otomatikleştirme Nasıl
  • 'yi Öğrenin PowerShell'de Cmdlet Kullanmayı Öğrenin
  • PowerShell'de Nesneleri Nasıl Kullanacağınızı Öğrenin
  • PowerShell'de Biçimlendirme, Filtreleme ve Karşılaştırmayı Öğrenme
  • Uzaklaştırmayı Kullanmayı ÖğreninPowerShell
  • Bilgisayar Bilgilerini Almak İçin PowerShell Kullanma
  • PowerShell'de Koleksiyonlarla Çalışma

Serinin diğer bölümleri için bütün hafta boyunca durmalısınız.

Arka Plan İşleri

Şimdiye kadar size PowerShell içinde göstermiş olduğum her şey eşzamanlıdır, yani kabuk içine bir şeyler yazdım ve bu komut çalıştırılıncaya kadar çok fazla şey yapamayacağım anlamına geliyor. Arka plan işlerinin içeri girdiği budur. Bir arka plan başlatmak için, iş sadece bir komut dosyası bloğunu Start-Job cmdlet'ine gönderir.

instagram viewer

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

Artık, komut dosyası bloğu arka planda yürütülürken, kabuk içinde istediğiniz her şeyi yapmakta özgürüz.

Yeni bir işi başlattığınızda, PowerShell bu işi temsil eden yeni bir iş nesnesi oluşturur. Get-Job cmdlet'i'ni çalıştırarak istediğiniz zaman tüm işlerin listesini alabilirsiniz.

İş nesneleri, işlerin durumuyla ilgili bilgi verir.Örneğin, yukarıdaki ekran görüntüsünde, hala çalışmakta olan GetFileList isimli BackgroundJob'ümüz olduğunu görebilirsiniz, ancak zaten veri döndürmeye başlamıştır. Eğer herhangi bir noktada işin çok uzun süre çalıştığına karar verirseniz, Stop-Job'a yönlendirerek işi kolayca durdurabilirsiniz.

Get-Job -Name GetFileList |Stop-Job

Ancak, bir işi bıraktığınızda, durdurduğunuz noktaya kadar aldığı her türlü veri hala kullanılabilir. Gerçi bir kazan var. PowerShell'de, bir işin sonuçlarını aldıktan sonra silinirler. Onların kalması için, Receive-Job'un keep switch parametresini belirtmelisiniz.

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

Bir işi bitirdikten sonra onu kaldırmanın en iyi yoludur.İşi kaldırmak için, onu Remove-Job cmdletine götürmeniz yeterlidir.

Get-Job -Name GetFileList |Remove-Job

Bu, Get-Job tarafından döndürülen iş listesinden kaldırılacaktır.

Uzak İşler

Birkaç ders önce, Uzaktan Kumandayı komutlarını kullanarak uzaktaki bir bilgisayarda PowerShell komutlarını yürütmek için nasıl kullanabileceğimizi inceledik, ancak Arka planda bir uzak işi başlatmak için Invoke-Komutu'nu da kullanabileceğinizi biliyor muydunuz? Bunu yapmak için, komutunuzun sonuna -AsJob parametresini ekleyin:

Invoke-Komutu -ComputerName Flash, Viper - Kimlik bilgisi yöneticisi -ScriptBlock{ gci} -AsJob

Bu basit bir komutdu ve şu ana kadar yürütmeyi tamamlamış olmalıdıriş durumumuza bir göz atalım.

Hmm, başarısızmış gibi görünüyor. Bu beni ilk işime bulaştırdı.PowerShell'de herhangi bir türde yeni bir iş yarattığınızda, görevi çalıştırmakta olduğunuz her bilgisayar için bir alt işe ek olarak bir ana iş oluşturur. Get-Job cmdlet'i kullandığınızda yalnızca üst işler gösterilir ve durum özelliği en kötü durum senaryosudur, yani komut yalnızca yüz bilgisayarlardan birinde çalışılamamış olsa bile, üst işler devlet şöyle der:başarısız oldu. Alt işlerin bir listesini görmek için IncludeChildJob parametresini kullanmanız gerekir.

Daha yakından bakarsanız, işin gerçekten yalnızca bir bilgisayarda başarısız olduğunu göreceksiniz; bu da bizi bir sonraki yakalamaya götürecektir.İşin sonuçlarını almaya çalıştığınızda, ebeveynin iş adını veya kimliğini belirtirseniz, PowerShell tüm alt işlerden verileri döndürür. Sorun, eğer çocuk işlerinden birinde bir hata olursa, bazı kırmızı metin bırakılacaktır.

Bununla baş edebilmenin iki yolu var.İlk olarak, hangi bilgisayarların sonuçlarını istediğinizi biliyorsanız, Recieve -Job cmdlet'indeki ComputerName parametresini basitçe kullanabilirsiniz.

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

Alternatif olarak, belirli bir çocuk işten meslek kimliği kullanarak sonuç alabilirsiniz.

Get-Job -Id 3 -IncludeChildJob

Get-Job -Id 5 |Receive-Job -Keep

WMI İş İlanları

WMI İşleri, Get-WmiObject cmdletine yalnızca -AsJob parametresinin eklenmesini gerektiren Uzak İşler ile aynı şey.

Ne yazık ki, bu, aynı zamanda Remote Jobs bölümünde bahsettiğim aynı gotiklere tabi oldukları anlamına geliyor.

Zamanlanmış İşler

Baktığımız son üç iş kalıcı değildi, yani yalnızca mevcut oturumunuzda mevcut. Temelde, bu, bir işi başlatıp başka bir PowerShell Konsolu açın ve Get-Job'ı çalıştırırsanız, hiçbir iş göremezsiniz demektir. Bununla birlikte, işe başladıktan sonra konsolda olursanız, durumunu görebilirsiniz. Bu, 'nin olarak kalıcı olduğu Planlı İşler'in aksine. Temel olarak, Zamanlanmış İş, bir programda çalışan bir komut dosyası bloğudur. Geçmişte, aynı etki, Windows Görev Zamanlayıcısı'nı kullanarak gerçekleşmiş olabilir; bu gerçekten de başın altında olan bitti. Yeni bir Zamanlanmış İş oluşturmak için aşağıdakileri yaparız:

Kayıt-Zamanlanmış İş - Ad GetEventLogs -ScriptBlock{ Get-EventLog -LogName Güvenlik - En Yeni 100} -Trigger( Yeni İşTrigger -Günlük -At 5:00) -ScheduledJobOption( Yeni Zamanlanmış İş Olanı İsteği-RunElevated)

Bu komutta devam eden çok şey var, o halde çözelim.

  • İlk olarak, Zamanlanmış İşimize GetEventLogs adını veriyoruz.
  • Daha sonra, tetiklendiğinde, temel olarak Güvenlik olay günlüğünün en yeni 100 girdisini alan belirtilen komut dosyası bloğunun içeriğini çalıştırmasını istiyoruz.
  • Daha sonra, bir tetikleyici belirledik. Tetikleyici parametresi bir tetikleyici nesneyi girdi olarak aldığından, her gün saat 5'de kalkacak bir tetikleyici oluşturmak için parantez komutunu kullandık.
  • Olay günlüğüyle uğraştığımız için, yeni bir ScheduledJobOption nesnesi oluşturup ScheduledJobOption parametresine geçirerek belirtebileceğimiz bir yönetici olarak çalışmamız gerekiyor.

Bu biraz farklı bir iş türünü olduğundan, bir makinedeki tüm zamanlanmış işlerin bir listesini almak için farklı bir komut kullanmanız gerekecektir.

Get-ScheduledJob

Hepsi bu kadar.