Anasayfa » nasıl » Geek Okulu PowerShell'deki İşleri Nasıl Kullanacağınızı Öğrenin

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

    PowerShell'de dört tür iş vardır - Arka Plan İşleri, Uzak İşler, WMI İşleri ve Zamanlanmış İşler. Ne olduklarını ve bunları nasıl kullanabileceğimizi öğrenirken bize katılın.

    Serideki önceki makaleleri okuduğunuzdan emin olun:

    • PowerShell ile Windows'u Nasıl Otomatikleştireceğinizi Öğrenin
    • PowerShell'de Cmdlet'leri Kullanmayı Öğrenme
    • PowerShell'de Nesnelerin Nasıl Kullanılacağını Öğrenme
    • PowerShell'de Biçimlendirme, Filtreleme ve Karşılaştırmayı Öğrenme
    • PowerShell'de Uzaktan Kullanmayı Öğrenin
    • Bilgisayar Bilgilerini Almak için PowerShell'i Kullanma
    • PowerShell'de Koleksiyonlarla Çalışma

    Ve tüm hafta boyunca dizinin geri kalanı için bizi izlemeye devam edin.

    Arkaplan İşler

    Şimdiye kadar PowerShell'de size gösterdiğim her şey senkronize oldu; bu, kabuğa bir şey yazdığımız ve bu komutun yürütülmesini tamamlayana kadar pek bir şey yapamayacağımız anlamına geliyor. Bu, arkaplan işlerinin girdiği yerdir. Bir arkaplan başlatmak için, iş sadece Start-Job cmdlet'ine bir komut dosyası bloğu iletir..

    Başlangıç ​​İşi -Ad GetFileList -Scriptblock Get-ChildItem C: \ -Recurse

    Şimdi kabuk içinde istediğimiz her şeyi yapmakta özgürüz, bu komut dosyası bloğu arka planda çalışırken.

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

    İş nesneleri size işlerin durumunu anlatır. Örneğin, yukarıdaki ekran görüntüsünde GetFileList adlı ve halen çalışıyor ancak GetFileList adlı bir BackgroundJob'un olduğunu görüyoruz. Herhangi bir noktada işin uzun süredir çalıştığına karar verirseniz, Stop-Job'a yönlendirerek kolayca durdurabilirsiniz.

    Get-Job -Adı GetFileList | Stop-İş

    Bununla birlikte, bir işi durdurduktan sonra, durdurduğunuz noktaya kadar toplanan veriler hala kullanılabilir durumdadır. Yine de bir kaçık var. PowerShell'de, bir iş için sonuçları aldığınızda, bunlar silinir. Kalmaları için, Alma İşinin tutma anahtarı parametresini belirtmelisiniz.

    Get-Job -Adı GetFileList | Alma İşi-Sakla

    Bir işi bitirdikten sonra, çıkarmak en iyisidir. İşi kaldırmak için basitçe Remove-Job cmdlet'ine yönlendirin.

    Get-Job -Adı GetFileList | Kaldır-İş

    Bu, Get-Job tarafından döndürülen işler listesinden çıkarılacak.

    Uzaktan İşler

    Birkaç ders önce, Invoke-Command kullanarak uzaktaki bir makinede PowerShell komutlarını yürütmek için uzaktan kullanmayı nasıl kullanabileceğimize baktık, ancak arka planda uzaktan bir işi başlatmak için Invoke-Command'ı da kullanabileceğinizi biliyor muydunuz? Bunu yapmak için, komutunuzun sonuna -AsJob parametresini eklemeniz yeterlidir:

    Invoke-Command -BilgisayarAdı Flash, Viper -Kredisel yönetici -ScriptBlock gci -AsJob

    Bu basit bir komuttur ve şimdiye kadar yürütmeyi bitirmiş olmalıydı, bu yüzden iş durumumuza bir göz atalım..

    Hmm, başarısız olmuş gibi görünüyor. Bu beni işleri ile ilk yakaladım. PowerShell'de herhangi bir türde yeni bir iş oluşturduğunuzda, işi çalıştırdığınız her bilgisayar için bir alt işin yanı sıra bir üst iş de oluşturur. Get-Job cmdlet'ini kullandığınızda, yalnızca size ana işleri gösterir ve durum özelliği en kötü durum senaryosudur; bu, komut yalnızca yüz bilgisayardan birinde çalıştırılamadığında bile, ana işler durumunun söyleyeceği anlamına gelir. 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 sadece bir bilgisayarda başarısız olduğunu göreceksiniz, bu da bizi bir sonraki ele geçirdi. İşle ilgili sonuçları 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 şu ki, çocuk işlerinden birinde bir hata olursa, kırmızı bir metinle bırakılacağız..

    Bunu aşmanın iki yolu var. Öncelikle, hangi bilgisayarların sonuçlarını istediğinizi biliyorsanız, sadece Recieve -Job cmdlet'in ComputerName parametresini kullanabilirsiniz..

    Get-Job -Id 3 | Alma İşi -Teep -BilgisayarAdı Viper

    Alternatif olarak, iş kimliğini kullanarak belirli bir alt işin sonuçlarını alabilirsiniz..

    Get-Job -Id 3 -InCludeChildJob

    Get-Job -Id 5 | Alma İşi-Sakla

    WMI İşleri

    WMI İşleri, Uzak İşler ile hemen hemen aynıdır, yalnızca Get-WmiObject cmdlet'ine eklenecek -AsJob parametresini gerektirir.

    Maalesef bu, Uzaktan İşler bölümünde bahsettiğim aynı yöntemlere tabi oldukları anlamına geliyor..

    Planlanmış İşler

    Baktığımız son üç iş türü ısrarcı değildi; bu, yalnızca geçerli oturumunuzda kullanılabilecekleri anlamına geliyordu. Temel olarak, bu, bir işi başlatıp ardından başka bir PowerShell Konsolu açıp Get-Job uygulamasını çalıştırdığınızda herhangi bir iş görmeyeceğiniz anlamına gelir. Ancak, işten attığınız konsola geri dönün, durumunu görebilirsiniz. Bu, Zamanlanmış İşlerin aksine ısrarcı. Temel olarak, Zamanlanmış İş, bir zamanlamaya göre çalışan bir komut dosyası bloğudur. Geçmişte, aynı etki, kaputun altında gerçekten olan Windows Görev Zamanlayıcı'yı kullanarak da başarılabilirdi. Yeni bir Zamanlanmış İş oluşturmak için aşağıdakileri yaparız:

    Register-ScheduledJob -Ad GetEventLogs -ScriptBlock Get-EventLog -LogName Güvenlik - En Yeni 100 -Trigger (Yeni-İş Tetikleyici -Günlük -Açık 5pm'de) -ScheduledJobOption (Yeni ZamanlanmışJobOption -RunElevated)

    Bu komutta oldukça fazla şey var, o yüzden hadi parçalayalım.

    • İlk önce, Zamanlanmış İşimize GetEventLogs adını veriyoruz..
    • Daha sonra, tetiklendiğinde, temel olarak Güvenlik olay günlüğünün en yeni 100 girişini alan, belirtilen kod bloğunun içeriğini çalıştırmasını istediğimizi söyleriz..
    • Ardından bir tetikleyici belirledik. Tetikleyici parametresi girdi olarak bir tetikleyici nesnesi aldığından, her gün saat 5'de patlayacak bir tetikleyici üretmek için parantez içinde bir komut kullandık.
    • Olay günlüğü ile ilgilendiğimiz için, yeni bir ScheduledJobOption nesnesi oluşturarak ve onu ScheduledJobOption parametresine ileterek belirleyebileceğimiz bir yönetici olarak çalıştırmalıyız..

    Bu biraz farklı bir iş 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..