PowerShell – Diziler Hakkında Bilmek İstediğiniz Her Şey – Bölüm 2
  1. Anasayfa
  2. Microsoft PowerShell

PowerShell – Diziler Hakkında Bilmek İstediğiniz Her Şey – Bölüm 2

0

Serimizin ilk yazısında, Powershell içerisinden Array kullanımı, oluşturma ve ne şekilde oluşturabileceğimiz üzerine değindik. Şimdi kaldığımız yerden hız kesmeden devam edelim.

Array içerisindeki eleman sayısı bulmak

Oluşturduğumuz array içerisinde kaç eleman var olduğunu merak ediyorsanız bunun için ‘Count’ niteliğini çağırarak değeri bulabilirsiniz.

Resim-1

# Array tanımlamak
$myfirstArray = @(
    'remote-pc1'
    'remote-pc2'
    'remote-pc3'
    'remote-pc4'
)

# Array Count bulmak

$myfirstArray.Count

Görüldüğü üzere sadece tanımladığım Array çağırıp onun özelliklerine indikten sonra, kaç elema olduğunu gördüm. Noktaya bastığınız birçok nitelik ve methodlar karşınıza çıkacaktır. Tek tek ne olduğuna Microsoft Web sitesinden bakabilirsiniz.

Array içerisindeki elemanın index değerini bulmak

İhtiyaç üzerine oluşabilecek ve hazır method olarak bizlere sunulan ‘IndexOf’ methoduna bir göz gezdirelim. Bu method sayesinde büyük bir Array – Koleksiyonunuz olsun ve içerisinde ortalama bin adet değer olduğunu düşünün. Bunun içerisinden belirlediğiniz değerin Index değerini öğrenmek istiyorsunuz, bunun için IndexOf sizlere yardımcı olacaktır. Neden bu değeri öğrenmeyelim diye düşünür iseniz, bu değer sayesinde yapmak istediğiniz bir döngü işleminde bu değere gelince belirli bir aksiyon aldırabilirsiniz. Örneğin , ‘for döngüsü’

Resim-2

# Array tanımlamak
$myfirstArray = @(
    'remote-pc1'
    'remote-pc2'
    'remote-pc3'
    'remote-pc4'
)

# Array içerisindeki elemanın Index değerini bulmak

$myfirstArray.IndexOf('remote-pc4')

Üsteki ekran görüntüsü içerisinde gösterdiğim üzere, Array içerisindeki istediğim değerin ‘Index’ değerini buldum. Değeri alıp şimdi ise ‘Length’ adındaki niteliğini öğrenelim. Basit haliyle ‘Length’ ilgili değerin uzunluğunu bize verir. Bunu biraz daha açmak gerekir ise, bu uzunlukta nedir ne işime yarayaracak dediğinizi duyar gibiyim, mesela Array’iniz bir Cep telefonu numaralarından oluştuğunu varsayın ve bu numaraların uzunluklarına göre eksik olup olmadığını anlayabilirsiniz.

Resim-3

#Index değeri bulunur ve atama yapılır.
$selectItem = $myfirstArray.IndexOf('remote-pc4')

#Bulunan Index değeri Array içerisinde aratılır ve Length elde edilir.
$myfirstArray[$selectItem].Length

Array elemanlarını Pipeline ile birlikte kullanın.

Pipeline, PowerShell içerisinde sıklıkla kullanılabilen bir yöntem olmakla birlikte, genelde komutların yazımını karmaşıklaştıran bir metot olarak görülmektedir. Aslında hiçte böyle değil. Bu kısım ile birlikte Array – koleksiyonlarınızı Pipeline içerisinde kullanımının ne kadar basit olduğu ve ne kadar esnek hale getirdiği incelenecektir. Öncelikle Pipeline konusunu anlamamız lazım, Neden Pipeline kullanmaya ihtiyaç duyarız? En basit haliyle; Bir üretim yapan fabrika hayal edin, bu fabrikanın her bölümünde farklı operasyonel görevlerin gerçekleştirildiği bölümler ve bu bölümlerin içerisinde görevleri gerçekleştiren makineler bulunmaktadır. Bu fabrikada üretilen ürünün tüm üretim süreçleri tamamlandığında, başlangıçta bir hammadde olarak fabrikaya girmesine rağmen, fabrikadan çıktığında üzerinde birçok işlem gerçekleşmiş ve kullanıma veya tüketime hazır vaziyettedir. Fabrika içerisindeki “Pipeline” yapısında bir hammadde olarak giren ürün, çeşitli aşamalardan geçerek ve en son kutulanarak tüketime hazır hale getirilir. Pipeline başlangıcındaki otomobilin iskelet halini hayal edin, Pipeline sonucunda elde edilen son üründe yine bir otomobildir. Ancak fabrika tarafından belirlenen kurallar, güvenlik poliçeleri, dünya standartları vb. süreçler dâhilinde değişiklikleri gerçekleştirilmiş ve son tahlilde elde edilen ürün tam da müşterinin istediği hale getirilmiştir.

Array ve Foreach Kullanımı

Özetle Array içerisindeki tüm elemanlar üzerinde işlem yapılmasının en temel ve basit yolu Pipeline kullanmaktır. Bir diziyi bir Pipeline sürecinden geçirdiğinizde, dizinin içindeki her öğe için ayrı ayrı işlenir ve belirlediğiniz işleme göre aksiyon alınır.

Resim-4

# Array tanımlamak
$myfirstArray = @(
    'remote-pc1'
    'remote-pc2'
    'remote-pc3'
    'remote-pc4'
)

$myfirstArray | ForEach-Object {"Elemanımızın adı: [$PsItem]"}

$myfirstArray | ForEach-Object {"Elemanımızın adı: [$_]"}


Yukarıda gerçekleştiren örnek, Array içerisindeki her elaman için bir işlem yapıldığını anlatmaktadır. Bu işlem tamamen sizin yazdığınız kod bloğunuz ile ilişkilidir. Bizim kod bloğumuz içerisinde her elemanın başına bir değer ekledik. Daha fazla ufkunuzu açmak için şu şekilde bir örnek verebiliriz. Powershell içerisinde Invoke-Command cmdlet var, bu command-let sayesinde uzaktaki Windows veya Linux cihazlara bir takım işlemler yaptırtabilirsiniz. İşte bu kısımda Array içerisinde elemanların hepsinin bir bilgisayar adı olduğunu düşünün ve Foreach-Object ( Iteration – yineleme – döngü ) sayesinde bu komutu Array içerisindeki her eleman için çalıştırabilirsiniz. Tamamen hayal gücünüz ile sınırlı!

Bir başka örnek ile devam edelim, Foreach-Object Pipeline dışında bir kullanım şeklide var. Bunu bir göz gezidrelim.

Resim-5

# Array tanımlamak
$myfirstArray = @(
    'remote-pc1'
    'remote-pc2'
    'remote-pc3'
    'remote-pc4'
)

foreach($myData in $myfirstArray)
{
   "Elemanımızın adı: [$myData]"
}


Kullanım biçiminde de görüldüğü gibi bir koleksiyon içerisinde bulunan tüm öğelerde ilgili kod bloğunu çalıştırabilme imkânına sahip olunmaktadır. Kullanım biçimini özetlemek gerekirse, Foreach ($<variable> in $<array>) ve daha sonra kod bloğunuz gelmektedir.

Array ile For Kullanımı

For döngüsü kullanımındaki temel amaç herhangi bir kod bloğunun belirlenen kez çalıştırılabilmesidir. Kullanım biçimini anlamak gerekirse, her programlama dilinde olduğu gibi aynı gözlenmektedir. For (baslangic; kıstas; tekrar). Bunların neler olduğunu önce bir anlayalım.

Belirtmiş olduğumuz for söz diziminde ilk parantez içerisinde 3 farklı opsiyonel parametre tanımlaması yaptıktan sonra köşeli parantez ile ilgili kod bloğu çalıştırılabilir. Bu opsiyonel parametreler;

Baslangic: Virgül ile ayrılmış komutlar zinciridir ve döngü başlangıcından önce çalışırlar. Daha çok döngü öncesinde değişken atamaları için kullanılır.
Kriter(Kıstas): Her döngü çalışmasında PowerShell tarafından çalıştırılan kıstastır ve konsola True / False Boolean değerlerini döndürür. Eğer kıstas True değerini döndürürse ilgili kod bloğu çalıştırılacaktır.
Repeat(Tekrar): Virgül ile ayrılmış komutlar zinciridir ve her döngüde çalışırlar.

Resim-6

# Array tanımlamak
$myfirstArray = @(
    'remote-pc1'
    'remote-pc2'
    'remote-pc3'
    'remote-pc4'
)

for($int = 0; $int -lt $myfirstArray.Count; $int++)
{
    "Elemanımızın adı: [{0}]" -f $myfirstArray[$int]
}

Yaptığımız örnekte yukarıda bulunan en basit haliyle For Döngüsünü anlamaya çalıştık. Aslında çok daha fazla detayları var fakat konudan çok sapmak istemediğim için meraklıları lütfen Powershell – Döngüler adlı konuyu araştırıp öğrenmesini tavsiye ederim. Herhangi bir programlama geçmişiniz var ise zaten bunlara hâkim olacaksınız. Süreci anlatmak adını aşağıdaki adımları takip etmekte fayda var.

For döngüsündeki ilk parantezde, tüm parametreler noktalı virgül (;) ile ayrılıyor.

  • İlk parametre ile $int = 0 değişkenine başlangıç değeri atanıyor.
  • İkinci parametre ile değişkenin döngü sonucunda ulaşacağı değer belirtiliyor. Bu değere ulaşıldığında döngünün sonuna ulaşılacağı bilmeniz gerekiyor. Bu kısımda örnekte mantıksal bir karşılaştırmak yaptık. ‘$myFirstArray.Count’ değeri size neyi geri döndürdüğünü tahmin etmemeniz hiçte zor değil.
  • Son parametrede ise değişkenin artış değeri belirtiliyor.

Özetle For, PowerShell içerisinde bulunan en temel döngü biçimidir. Diğer döngü tipleri ile gerçekleştirilebilen karmaşık senaryolar sebebi ile sıklıkla başvurulmamaktadır. Array içinde sık sık başvuracağınız bir nokta olacak, lütfen bunu tekrar tekrar deneyin ve çalışın.

Array içerisinde Object kullanımı

Şimdiye kadar hep Array içerisinde bir değer atamayı ve barındırmayı gördük. Bu değerler bildiğiniz üzere, integer, string, boolean olarak ifade edebiliriz. Ancak Array alışkın olduğunuz veri tipleri dışında Object ( Nesne ) barındırma şansınız var. Powershell içerisinde Object kelimesinin tam olarak ne anlama geldiğine şu sayfadan inceleyebilirsiniz. Bildiğiniz gibi diğer metin-tabanlı shell sistemlerinin aksine, Powershell temel olarak zengin nesne yönetimine ve tüm .NET ortamının içeriğine sahiptir. Bununla beraber uzun zamandır ise, Powershell 6.0 ile tüm platformlarda desteği var ve bu inanılmaz bir keyif. Herneyse konuyu çok dağtmayalım, Array içerisinde nasıl nesne barındırabiliriz onun üzerinden geçelim.

Resim-7

# Array içerisinde nesne tanımlamak
$myObjectArray = @(
       [pscustomobject]@{ArticleName='HasanGural-ARMTemplate';ArticleNumber='152'}
       [pscustomobject]@{ArticleName='HasanGural-AzureDevops'; ArticleNumber='199'}
)

Yukarıdaki kod bloğu içerisinde en temel haliyle, Array içerisinde nesne tanımladık. Nesnemizin, bir Property Name ve PropertyValue değerleri bulunmaktadır. Nesne konusuna gelen taleplere göre başka bir yazımız içerisinde ele alabiliriz. Onlarda en az bu konu kadar önem arz ediyor. Oluşturduğumuz nesnelerimizin, değerlini gözlenleyebiliriz. Şimdi ise Index değeri ‘sıfır'(0) olan değeri çağıralım ve birkaç işlem yapalım.

Resim-8

Array içerisindeki ilk nesnemiz olan değerin niteliklerini yani propertylerini görebilmekteyiz. Array tipindeki değişkeni çağırdığım zaman tüm detayları ile karşıma yukarıdaki gibi çıkmaktadır. Çok basit haliyle güncelleme işlememizi hemen gerçekleştirelim. Array içerisinde ilk elemanımız olan ArticleNumber ‘154’ olarak güncelleyelim.

Resim-9

# Array içerisinde nesne tanımlamak
$myObjectArray = @(
       [pscustomobject]@{ArticleName='HasanGural-ARMTemplate';ArticleNumber='152'}
       [pscustomobject]@{ArticleName='HasanGural-AzureDevops'; ArticleNumber='199'}
)

$myObjectArray[0].ArticleNumber = 154

Yine farkılı bir güncelleme işlemini anlattık. Array içerisinde dikkat edilmesi gerekenler ve bize sağladıkları faydaları ve kullanım senaryolarına değindik. Bir sonraki yazımızda artık biraz daha mantıksal operatorler üzerinden işlemler gerçekleştirelim.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs:array yapısı, powershell, powershell array, powershell degiskenler, Powershell ile Diziler, Powershell ile Diziler ( Array )

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Hasan Güral, Istanbul doğumlu ve uzun yıllardır bilişim sektöründe danışmanlıktan eğitmenliğe farkli pozisyonlarda görev almıştır. Üniversite eğitimiyle birlikte bilişim sektöründe Kibar Holding, Bilge Adam Bilgi Teknolojileri Akademisi ve PeakUp Bilgi Teknolojileri gibi farkli kurumlarda Kıdemli Danışman ve Eğitmen olarak sektöre yön veren projelerde yer almistir.Microsoft Azure alanında yapmış olduğu paylaşımlar ve katkılarından dolayı Microsoft Valuable Professional (Azure) unvanına hak kazanmıştır. Cloud teknolojilerinin otomasyon alaninda gelişmesiyle birlikte zamaninin bir çoğunu PowerShell, Event-Driven Orchestration, Infrastructure as a Code ve Configuration as a Code ile geçirmektedir.Kariyerine Ingiltere’de DevOps Engineer ve Automation Enthusiast rolü ile Cloud Rundle’da devam etmektedir.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir