Windows Powershell’de çok karıştırılan 3 döngü ve örnekler

Powershell’de çok karıştırılan 3 döngü: Foreach ve For ve Foreach-Object

 

Foreach-Object

Bir kümedeki istisnasız tüm öğeler için aynı döngü içindeki komutların çalıştırılmasını sağlar.

Örneğin;

 

Get-NetAdapter | Foreach-Object{

$_.macaddress

}

Yukarıdaki örnekte bilgisayarınızda bulunan tüm ağ aygıtları (Ethernet kartı, kabosuz bağdaştırıcı vs.) listeleniyor. Ancak listelenirken her bir aygıtın MAC adresini ekrana yazdırıyor.

Elbette amacım sadece bir liste içindeki tüm ekipmanların belirli öğelerini ekrana yazdırmak olsaydı hiç bu kadar uğraşmayacaktım ve Select-Object ya da Format-Table komutlarıyla ilgili süzme işlemini yapardım. Bakmaın siz bana, maksat Foreach-Object ile tüm öğelerin tek tek işlendiğini göstermek.

 

Foreach

Burada da farklı bir kullanıım sergiliyorum. Aslında yine amacım proses adedi kadar aynı işlemi yapmak. Burada “proses adedi kadar” deme görevi bana düşüyor. Yukarıdaki örnekte ise onu da poersell yapıyor, çnkü kaç adet proses olduğunu bulma yöntemini ona söylememe gerek yok.

$prosesler=get-process

ForEach($herbirproses in $prosesler){

“—————-”

“Process Adı: ” + $herbirproses.name

}

 

For

For kullanımında ise bir döngünün ne kadar süreceği benim belirlediğim kriterlere bağlı. Mesela 1’den başlayıp 10’a kadar diyebileceğim gibi istersem 0’dan başlayıp toplam servis adedine göre de diyebilirim. Burada sayaç mantığı daha ön planlda. Sayacımı nerde başlatıp nered durduracağıma kendimin karar vermesi gerekiyor.

Aşağıdaki örnekte önce servis sayısını öğreniyorum. Sonra sayacımı 0’dan başlatıp, birer birer artacak şekilde en son $servissayisindan 1 eksik duruma gelene kadar devam etmesini söylüyorum. Neden 1 eksik? Çünkü neredeyse tüm programlama dillerinde öğelerin sayıları 0’dan başlıyor.

 

cls

$servissayisi=(get-service).count

for($sayac=0;$sayac-le $servissayisi-1;$sayac++){

write-host $sayac (get-service)[$sayac]

 

}