PowerShell

PowerShell Diziler

PowerShell dizi nasıl tanımlanır? PowerShell array yapısı, PowerShell listeler (array list), PowerShell hash tabloları (hash table, dictionary), PowerShell döngü (for, foreach, while) ile dizi elemanlarına erişmek

PowerShell Diziler Hakkında

Dizi, bir öğe koleksiyonunu saklamak için kullanılabilen bir veri yapısı türüdür. Öğe koleksiyonu aynı veri tipinden veya farklı olabilir. Bir dizideki öğelere indeks kullanılarak erişilebilir. Dizinin indeksi genellikle 0’dan başlar ve bu nedenle ilk öğeye erişmek için [0] indeksini kullanmanız gerekir. Genellikle dizilere öğe ekleme veya öğe kaldırma şeklinde iki işlem olabilir. Bu yazıda, PowerShell Diziler hakkında bilgi verilecektir.

PowerShell Dizi (Array) Tanımlamak

Bir dizi aşağıdaki yollardan biriyle tanımlanabilir:

  1. Bir dizi tanımlamanın yollarından biri @() şeklindedir.
    Örnek: $Dersler= @('Tarih','Coğrafya','Matematik')
  2. Bir dizi, virgülle ayrılmış bir liste olarak da oluşturulabilir.
    Örnek: $DomainUsers='ahmet','attila','reis'
  3. Belirli bir veri türü için bir dizi oluşturulabilir.
    Örnek: [int[]] $numbersarray = 1,2,3,4,5

PowerShell Dizi Elemanlarına Erişmek

PowerShell dizi elemanlarına erişmek konusuna aşağıdaki örnek üzerinden devam edelim.

Örnek:

$Dosyalar=@('Personel.xls','Maas.xls','Terfi.xls','Haftalik_Rapor.doc')

$Dosyalar[0] komutu “Personel.xls” sonucunu, $Dosyalar[3] komutu ise “Haftalik_Rapor.doc” sonucunu döndürecektir. Birçok dil yalnızca tek bir indeks belirtilmesine izin verirken, PowerShell dilinde birden çok indeks aynı anda kullanılabilir. $Dosyalar[1,2] komutu “Maas.xls” ve “Terfi.xls” sonucunu döndürecektir.

PowerShell Dizi İşlemleri

PowerShell Diziye Eleman Eklemek

Mevcut bir diziye nasıl öğe ekleneceğine ilişkin bir örnek görelim.

Örnek:

$Title=@('Aktif','Dizin')

Yukarıdaki diziye bir eleman eklemek için ‘+ =’ operatörü kullanılabilir.

$Title+='Servisi'

$Title komutu çıktısı:

PS C:\Users\ahmet> $Title=@('Aktif','Dizin')
$Title+='Servisi'
$Title
Aktif
Dizin
Servisi
PS C:\Users\ahmet>

PowerShell Dizi Elemanının Değerini Değiştirmek

Bir dizinin herhangi bir elemanını değiştirmek için o elemanın indeksi kullanılır.

Örnek:

PS C:\Users\ahmet> $Title=@('Aktif','Dizin', 'Dersleri')
$Title[2] = 'Ders Notları'
$Title
Aktif
Dizin
Ders Notları

PS C:\Users\ahmet>

PowerShell Diziler Eleman Sayılarının Bulunması

Bir dizinin eleman sayısı aşağıdaki şekilde ‘.Count‘ ile alınabilir.

Örnek:

PS C:\Users\ahmet> $Dosyalar=@('Personel.xls','Maas.xls','Terfi.xls','Haftalik_Rapor.doc')
$Dosyalar.Count
4

PS C:\Users\ahmet>

PowerShell Dizi Elemanlarını Sıralamak

Öğeler aynı veri türündeyse, “Sort” operatörü bir dizinin öğelerini sıralamak için kullanılabilir. Hiçbir özellik uygulanmazsa varsayılan olarak küçükten büyüğe sıralama yapacaktır.

Örnek:

PS C:\Users\ahmet> $numaralar=@(4,6,7,11,9)
$numaralar | sort
4
6
7
9
11

PS C:\Users\ahmet>

Büyükten küçüğe sıralamak için “-Descending” parametresi kullanılır.

PS C:\Users\ahmet> $numaralar=@(4,6,7,11,9)
$numaralar | Sort -Descending
11
9
7
6
4

PS C:\Users\ahmet>

PowerShell Dizi Elemanını Bulmak

Bir dizi içindeki herhangi bir elemanı aramak ve bulmak için “-like” operatörü kullanılabilir. “*” karakteri ile ilgili ileride derinlemesine bilgi veriyor olacağız. Ancak şimdilik “*erson*” ifadesinin başlangıç ve bitişindeki karakterlerinin önemi olmaksızın “erson” içeren “Personel.xls” gibi ifadeleri getireceğini bilmemiz yeterli olacaktır.

PS C:\Users\ahmet> $Dosyalar=@('Personel.xls','Maas.xls','Terfi.xls','Haftalik_Rapor.doc')
$Dosyalar -like "*erson*"
Personel.xls

PS C:\Users\ahmet>

PowerShell Çok Boyutlu Diziler

Aşağıdaki şekilde çok boyutlu diziler oluşturulabilir. Örnekteki dizi üç satır ve üç sütunludur.
$TestMultidimensionalArrays = @(1,2,3), @(4,5,6), @(7,8,9)

Aşağıdaki şekilde yani “$TestMultidimensionalArrays[2][1]” şeklinde bu dizinin 2. satırının 1. sütunundaki öğeye erişilebilir.

PS C:\Users\ahmet> $TestMultidimensionalArrays = @(1,2,3), @(4,5,6), @(7,8,9)
$TestMultidimensionalArrays[2][1]
8

PS C:\Users\ahmet>

PowerShell For Döngüsü İle Dizi Elemanlarına Erişmek

Diğer dillerde olduğu gibi, for döngüsü bir dizideki elemanlara erişmek için kullanılabilir.

PS C:\Users\ahmet> $Dosyalar=@('Personel.xls','Maas.xls','Terfi.xls','Haftalik_Rapor.doc')
for($i=0;$i -lt $Dosyalar.Length; $i++)
{
    Write-Host $Dosyalar[$i] 
}
Personel.xls
Maas.xls
Terfi.xls
Haftalik_Rapor.doc

PS C:\Users\ahmet>

PowerShell While Döngüsü İle Dizi Elemanlarına Erişmek

#Kod:
$SicilNo = 46008978, 46008975, 46008972, 46008971, 46008976, 46008977, 46008978, 46008979, 46008928, 46008178

$i = 0
while($i -lt $SicilNo.Length) {
    $SicilNo[$i];
    $i++
}

#Çıktı
46008978
46008975
46008972
46008971
46008976
46008977
46008978
46008979
46008928
46008178

PowerShell ForEach Döngüsü İle Dizi Elemanlarına Erişmek

ForEach dizideki her öğeye karşı bir eylem gerçekleştirmek ve yine For döngüsü gibi her elemana erişebilmek için kullanılabilir.

PS C:\Users\ahmet> $test=@(1,4,5,6,7,8,9,10)
foreach($i in $test)
{
    $i=$i+5
    Write-Host $i
}
6
9
10
11
12
13
14
15

PS C:\Users\ahmet>

PowerShell Listeler (PowerShell Array List)

PowerShell Listeler Örnek:

$Baslik = [System.Collections.ArrayList]::new()
$Baslik.Add("Aktif")
$Baslik.Add("Dizin")
$Baslik.Add("Servisi")
$Baslik

PowerShell Listeler Örnek Çıktısı:

PS C:\Users\ahmet> $Baslik
Aktif
Dizin
Servisi
PS C:\Users\ahmet>

İlk satır, listeyi oluşturmanın yoludur ve sonraki satırlar bu listeye eleman eklemektir.

PowerShell Diziler vs Listeler İçin Performans Karşılaştırması (Array vs Array List)

Aşağıdaki örnekler, bir dizi veya listede işlem gerçekleştirirken performans farkını gösterir. Örnekte “$dizi” isminde bir dizi ve “$liste” isminde bir liste oluşturulup 5000’er eleman yüklenmiştir. İkiside “ForEach” döngüsüne sokulup performansları “Measure-Command” ile ölçülmüştür.

Girdi:

#Dizi Performansı
$dizi = @()
$dizi_performansı = Measure-Command -Expression { 0..5000 | ForEach-Object { $dizi += $_+1 }}
$dizi_performansı
Write-Host `n

#Liste Performansı
$liste = [System.Collections.ArrayList]@()
$liste_performansı = Measure-Command -Expression { 0..5000 | ForEach-Object { $liste += $_+1 }}
$liste_performansı

Çıktı:

#Dizi Performans Çıktısı
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 576
Ticks             : 5762328
TotalDays         : 6,66936111111111E-06
TotalHours        : 0,000160064666666667
TotalMinutes      : 0,00960388
TotalSeconds      : 0,5762328
TotalMilliseconds : 576,2328

#Liste Performans Çıktısı
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 521
Ticks             : 5218206
TotalDays         : 6,03959027777778E-06
TotalHours        : 0,000144950166666667
TotalMinutes      : 0,00869701
TotalSeconds      : 0,5218206
TotalMilliseconds : 521,8206

Bu teste göre listelerin performansı dizilerin performansından daha hızlı ve daha iyidir.

PowerShell Diziler İçin Örnekler

Aşağıdaki örneklerle şimdiye kadar öğrendiklerimizi pekiştirelim.

Aşağıdaki örnekte bir dizi kullanıldı ve “C:\Windows” altında bulunan tüm klasörler bu dizi elemanı olarak eklendi. Ardından “foreach” döngüsü ile dizi elemanları sıralandı.

Örnek:

$win = ls "C:\Windows"
$objeler = $win.Name

foreach($obje in $objeler)
{
    Write-Host $obje
}

Aşağıdaki örnekte PowerShell “Get-EventLog” komutu ile Windows Event Logs altından tüm System event logları “$Loglar” isimli bir listeye eklenmiştir. Ardından yine bir “For” döngüsü ile tüm EventID’ler listelenmiştir.

Örnek:

$Loglar = [System.Collections.ArrayList]@()
$Loglar = Get-EventLog -LogName System

for ($i = 0; $i -lt $Loglar.Length; $i += 1) 
{
    Write-Host $Loglar[$i].EventID
}

PowerShell Hash Tablosu

PowerShell Hash Tablosu bir yapısal dizidir. Bir PowerShell hash tablosu elemanlarını anahtar-değer (key-value) formatında tutar. Bu yapı diğer dillerde Sözlük (Dictionary) yada İlişkisel Dizi (Associative Array) olarak da isimlendirilir.

PowerShell Hash Tablosu Örnek:

#Boş bir PowerShell Hash Tablosu Tanımlamak:
$testhashtable=@{}

PowerShell Hash Tablosu Örnek:

PS C:\aktifdizin> $Personel=@{ Adi="Ahmet";Soyadi="Elibol";Gorevi="Yazar"}
$Personel

Name                           Value                                                                                                                                                         
----                           -----                                                                                                                                                         
Adi                            Ahmet                                                                                                                                                         
Soyadi                         Elibol                                                                                                                                                        
Gorevi                         Yazar                                                                                                                                                         



PS C:\aktifdizin>

Yukarıdaki örnekte “$Personel” isminde bir PowerShell Hash Tablosu yani Dictionary tanımlandı. “Adi“, “Soyadi” ve “Gorevi” anahtarları için “Ahmet“, “Elibol“, “Yazar” değerleri atandı.

Sadece anahtarlara erişim için “.Keys” kullanılır.

PS C:\aktifdizin> $Personel=@{ Adi="Ahmet";Soyadi="Elibol";Gorevi="Yazar"}

$Personel.Keys
Adi
Soyadi
Gorevi

PS C:\aktifdizin>

Sadece değerlere erişim için “.Values” kullanılır.

PS C:\aktifdizin> $Personel=@{ Adi="Ahmet";Soyadi="Elibol";Gorevi="Yazar"}

$Personel.Values
Ahmet
Elibol
Yazar

PS C:\aktifdizin>

PowerShell Hash Tablosu Örnekler:

Girdi:
$Notlar = @{ Turkce = "100"; English = "85"; Matematik = "95"}
write-host("Hash Tablosu Anahtarları Yazdırılıyor")
$Notlar.keys

write-host("Hash Tablosu Değerleri Yazdırılıyor")
$Notlar.values

write-host("Hash Tablosu Veri Adeti")
$Notlar.Count

write-host("Hash Tablosu Veri Ekleniyor")
$Notlar["Sosyal"] = "93"

write-host("Hash Tablosu Veri Ekleniyor")
$Notlar.Add("Coğrafya","88")

write-host("Hash Tablosu Veri Adeti")
$Notlar.Count

write-host("English Dersi Siliniyor")
$Notlar.Remove("English")

write-host("Hash Tablosu Veri Adeti")
$Notlar.Count

write-host("Hash Tablosu Anahtara Göre Sıralanıyor")
$Notlar.GetEnumerator() | Sort-Object -Property key

Çıktı:
Hash Tablosu Anahtarları Yazdırılıyor
English
Matematik
Turkce
Hash Tablosu Değerleri Yazdırılıyor
85
95
100
Hash Tablosu Veri Adeti
3
Hash Tablosu Veri Ekleniyor
Hash Tablosu Veri Ekleniyor
Hash Tablosu Veri Adeti
5
English Dersi Siliniyor
Hash Tablosu Veri Adeti
4
Hash Tablosu Anahtara Göre Sıralanıyor
Hash Tablosu Değerlere Göre Sıralanıyor

Name                           Value                                                                                                                                                         
----                           -----                                                                                                                                                         
Matematik                      95                                                                                                                                                            
Sosyal                         93                                                                                                                                                            
Coğrafya                       88                                                                                                                                                            
Turkce                         100

PowerShell Diziler

Bir dizinin ana avantajı bellek yönetimidir. Bunlara doğrudan önbellekten erişilebilir, bu da daha hızlı alınmasına yardımcı olur. Tanımlandıktan sonra birden çok kez tekrar kullanılabilirler.

PowerShell Diziler

Makalemizi okuduğunuz için teşekkür ederiz. Soru ve önerilerinizi aşağıdaki formu kullanarak bize iletebilirsiniz. “PowerShell Nedir?” isimli makalemiz ilginizi çekebilir.

Yoluyla
PowerShell Nedir?PowerShell TarihçesiPowerShell ÖzellikleriÖrnek PowerShell KomutlarıPowerShell Değişkenler
Daha Fazla Göster

Ahmet Elibol

Üniversite eğitimini Kimya ve İşletme bölümlerinde tamamlayan Ahmet Elibol, yüksek lisans eğitimini de İşletme (Master of Business Administration - MBA) üzerinde tamamlamıştır. 1999 yılından bu yana bilişim sektöründe bulunmaktadır ve şu anda Rönesans Holding şirketinde CIO (Chief Information Officer) pozisyonunda görev yapmaktadır.  Ahmet Elibol, profesyonel kariyerine aldığı pascal ve delphi ile yazılım mühendisliği eğitimiyle başlamıştır. 2004 yılından sonra ilgi ve uzmanlık alanlarını Microsoft Sunucu Sistemleri, Sistem Programlama ve Bilgi Güvenliği konularında güncellemiştir. Yazar 4 yıl kadar bir akademide Sistem Mühendisliği eğitimleri vermiştir. Yazar hobi amaçlı programlama, yapay zeka, makine öğrenmesi, yapay sinir ağları, görüntü işleme ve nesnelerin interneti konularında çalışmaktadır. İngilizce, Rusça dillerini bilen Ahmet Elibol MCT, MCITP, MCTS, MCSE, MCSA vb. uzmanlık sertifikalarına sahiptir ve Bilgisayar Mühendisliği yüksek lisansına devam etmektedir.

İlgili Makaleler

2 Yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu