Powershell 7 Paralel Processing yazımızda sizlere Powershell 7 de kullanılan Foreach Paralel özelliğinden bahsedeceğiz. Bu özellik sayesinde Powershell querylerimizde performans artışlarını göstereceğiz. Öncellikle makinenize Powershell 7 kurulumu yapmanız gerekmektedir. Bunun için linki kullanabilirsiniz.
İndirdikten sonra kurulumunu tamamlamaktayız. Sunucuda yüklü olan powershell version’u ve Powershell 7 beraber kullanabilirsiniz. Kontrol etmek için cmd üzerinden pwsh.exe çağırabilirsiniz. İki sürümüde aynı anda yüklü olduğunu görebiliriz.

Şimdi gelelim konumuza PS7 ile Foreach objelerde nasıl performans artışı sağlayacağız. İlk olarak bir örnek ile başlayalım.
Bizler foreach object ile döngü oluşturabiliriz ve sırayla objeleri döndürebiliriz. Örnek olarak aşağıdaki örneğe bakalım.
1..15 | ForEach-Object { "koraycankaraduman $_"; sleep 1 }
Örnekte koraycankaraduman 1,2,3,4 diye her 1 sn’de durarak yazdırma işlemi yapacaktır. Toplamda bu adım 15 sn sürecektir.

Bu komutun saniye bazlı ölçümünü’de yapalım.Ölçümde 15 saniye olduğunu göreceğiz.
(Measure-Command {1..15 | ForEach-Object { "koraycankaraduman $_"; sleep 1 }}).Seconds

Peki bu noktada PS7 de foreach için -paralel özelliği devreye girecektir. Bu query’i 3 saniyeye indireceğiz. Bunu paralel özelliği ile yapacağız. Bu aşamada query’imizi biraz değiştirelim. Değişen query’de koraycankaraduman tek tek değil 5’er 5’er geldiğini göreceğiz. Neden 5 olduğunu yazının ilerisinde bahsedeceğiz.
1..15 | ForEach-Object -Parallel { "koraycankaraduman $_"; sleep 1 }
Ayrıca ölçüm için
(Measure-Command {1..15 | ForEach-Object -Parallel { "koraycankaraduman $_"; sleep 1 }}).Seconds

Query’imizin 3 saniyeye düştüğünü görmekteyiz. Paralel özelliği bizlere aslında paralel olarak işlem yapma özelliği katmaktadır. Yani query tek tek değil belli bir ThrottleLimit ile çalışmasını sağlamaktadır. Eğer belirtmez isek Default olarak ThrottleLimit 5 dir fakat arttırılabilir. Bir örnekte ThrottleLimit değiştirerek yapalım.
Limiti 15 olarak set ettik ve query’imizin 1 saniyede tamamlandığı görmekteyiz.
(Measure-Command {1..15 | ForEach-Object -Parallel { "koraycankaraduman $_"; sleep 1 } -ThrottleLimit 15} ).Seconds

Bu özellik sayesinde bir çok alanda kullanabiliriz. Get-ChildItem ile dosyalarımıza bakarken , Birden fazla sunucuya query çalıştırdığımızda , birden çok event log type toplarken gibi örnekler verilebilir.
Powershell 7 Paralel Processing bu yazımızda sizlere anlatmış olduk. Diğer yazılarımı aşağıdaki kategorilerden takip edebilirsiniz.