PowerShell Filtering And Comparison Operators

Want create site? Find Free WordPress Themes and plugins.

Merhaba arkadaşlar bu yazımız da filtreleme ve karşılaştırmalı operatörlerden bahsedeceğiz. Filtreleme data’yı süzerek istediğimiz sonucu elde etmek demektir. Komutlar üzerinden gelen bütün data’ya ihtiyacımız çok fazla olmamaktadır. Bu nedenden dolayı amacımıza yönelik olarak komuttan gelen değerleri kullanmak istiyorsak filtreleme kullanmak zorundayız. Örnek olarak servisleri listeleyen “Get-Service” komutun da “-Name” parametresi bir filtreleme özelliğine sahiptir. Eğer siz “Get-Service” komutunu tek başına çalıştırırsanız aşağıdaki gibi bir sonuç elde etmiş olacaksınız.

Fakat burada bizim ihtiyacımız olmayan servislerde bulunmakta, biz tek bir servisi çağırmak istiyoruz fakat burada bilgisayardaki bütün servisler listeleniyor. Burada eğer tek bir servis çağıracaksak “-Name ” parametresini kullanmamız gerekiyor.

Get-Service -Name ALG

Bunun sonucunda çıktı olarak tek servisi çağırabileceğiz, aşağıda çıktısına bakalım.

Cmdletsler üzerindeki bazı parametler bize gelecek datayı filtrelememizi sağlar, aslında komutunun aksiyonunu değiştirir. PowerShell komutların kendi üzerlerindeki filtreleme parametrelerinin yetmediği noktada “Where-Object” cmdletini kullanmamız gerekecektir. “Where-Object” Pipe kullanılarak çalıştırılabilir. Örnek olarak sadece çalışan servisleri listelemek istiyorsanız “Where-Object” filtreleme komutunu kullanabilirsiniz.

Get-Service Where-Object Status -eq ‘Running’

Çalışan servislerimizi listeleye bildik evet fakat burada “-eq” adında karşılaştırmalı operatörden yardım aldık. PowerShell’de günlük hayatımızda kullandığımız “=” sembolu filtreleme de eşit anlamına gelmiyor. Eğer iki değerin eşit olma durumunu karşılaştıracaksam “-eq” yani “Equality” operatörünü kullanmam gerekiyor. Aşağıda diğer karşılaştırma operatörlerini ve açıklamalarını yazıyor olacağım.

Comparison type
(Karşılaştırma tipi)
Case-insensitive operator
(Büyük küçük harf duyarsız)
Case-sensitive operator
(Büyük küçük harf duyarlı)
Equality (Eşit) -eq -ceq
Inequality(Eşit değil) -ne -cne
Greater than(Büyük) -gt -cgt
Less than(Küçük) -lt -clt
Greater than or equal to(Eşit veya büyük) -ge -cge
Less than or equal to(Eşit veya küçük) -le -cle
Wildcard equality(* karakteri ile eşit) -like -clike

Yukarı daki örnekte gördüğünüz üzere sadece çalışan servisleri lsitelemek için “Where-Object” komutunu kullandım. Burada tek bir şartımız olduğu için “Where-Object” komutunu en basic haliyle kullandım. Eğer çalışan servisler ve displayname de windows geçen servisleri öğrnemek isteseydim “Where-Object”‘in gelişmiş kullanımı gerçekleştirmem gerekecekti. Burada karşılaştırmalı operatorlerden “-like” kullanacağım ayrıca mantıksal operatörlerden “ve” anlamına gelen “-and” operatötünü kullanacağım. Bir örnek ile açıklayalım.

Get-Service Where-Object -FilterScript {$_.Status -eq “Running” -and $_.DisplayName -like “*Windows*”}

 

Evet komutumuzun çıktısı ekrana bu şekilde yansıyacak ve istediğimiz şekilde gelen sonucu filtreleyerek manipüle etmiş durumdayız. Filteleme eğer gelişmiş seviyede ise, birden fazla koşulu filtrelememiz gerektiğin de “{ }” koşulumuzu süslü parantez içine yazmamız gerekecektir. Ayrıca yine birden fazla filtreleme koşulumuz var ise “$_” veya “$PSItem” kullanarak pipe ile aldığımız değerleri göstermemiz gerekmektedir. “-Like” operatörünü wildcard yani yıldız kullarak çalıştırabilirsiniz bir kelimeyi,sözcüğü veya harfi “*x*” yıldız sembolu arasına aldığınız taktirde içinde “x” geçen anlamına gelmektedir. Biz yukarıdakş örnekte DisplayName’lerinde windows geçen servisleri ve çalışır durumda olan servisleri listeledik.

Bir örnek daha yaparak açıklayalım. “Get-EvenLog” event logları listeleyen bir cmdlets belirli bir event id ye sahip olan logları listelemek istiyorum bunu aşağıdaki 3 yöntemle gerçekleştirebilirim.

Get-EventLog -LogName Application -InstanceId 1001

Get-EventLog -LogName Application where EventId -eq 1001

Get-EventLog -LogName Application where {$_.EventID -eq 1001}


Yukaridaki örneklerde gördüğünüz gibi hepsi aynı sonucu getirmektedir. Fakat burada dikkat edilmesi gereken nokta yazdıgınız script yani kod bloğunun çalışma süresidir. Eğer bir cmdletin filtreleme parametresi varsa ve bu sizin işinize yarıyorsa kesinlikle kendi üzerindeki filtreleme parametresini kullanmalısınız veya eğer işinize yaramıyorsa ana datayı getiren komuttan sonra “Where-Object” kullanmanız tavsiye edilir bu sizin kod bloğunuzun filtrelemede uzun süre zaman kaybetmesini engeller.

Bir yazımızın daha sonuna geldik. Bir sonraki makalemiz de görüşmek dileği ile. Hoşçakalın!

 

Ercan ESE

Microsoft Product Consultant and Trainer,MCT

Did you find apk for android? You can find new Free Android Games and apps.

Bir Cevap Yazın

Find NULLED WordPress Themes and Plugins at NulledHub.net