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]
}