PowerShell ArrayList - Yeni Başlayanlar İçin Kılavuz!
Diziler, diğer programlama dilleri gibi PowerShell'de öğelerin listesini depolamanın basit bir yolunu sağlar. Ancak standart PowerShell dizilerinin sınırlamaları vardır; sabit boyutludurlar ve dizi içeriğini değiştirmek için pek çok yararlı yöntem sunmazlar. ArrayList'lerin devreye girdiği yer burasıdır. ArrayList, PowerShell'deki en kullanışlı koleksiyon türlerinden biridir. Gerektiğinde büyüyüp küçülebilen dinamik bir dizi sağlar. ArrayLists, koleksiyondaki öğeleri eklemeyi, kaldırmayı, sıralamayı ve güncellemeyi kolaylaştırır.
Bu yazıda şunları nasıl yapacağınızı öğreneceksiniz:
- PowerShell'de ArrayLists oluşturma
- ArrayList'e öğe ekleme, ekleme ve kaldırma
- ArrayList'leri dinamik olarak yeniden boyutlandırın
- ArrayList'leri sıralama ve tersine çevirme
- Öğelere dizine göre erişme
- Birden çok ArrayList'i birleştirme
- ArrayList ve diziler arasında dönüştürme
- ArrayList'teki öğeleri arayın
Bu kapsamlı kılavuzda, oluşturma aşamasından manipülasyona kadar PowerShell ArrayList'in derinliklerine ineceğiz, özelliklerini ve faydalarını ortaya çıkaracağız, yaygın hataları gidereceğiz ve komut dosyası performansınızı optimize etmek için ipuçları paylaşacağız.
ArrayList'i ve PowerShell'deki Avantajlarını Anlamak
ArrayLists'le nasıl çalışılacağını anlamak, daha esnek komut dosyası oluşturma yeteneklerinin kilidini açar. ArrayList, System.Collections.ArrayList sınıfında bulunan genel bir List koleksiyon türüdür. Dizeler, sayılar, özel nesneler vb. gibi herhangi bir nesne türünden sıralı koleksiyonları depolayabilirsiniz. Geleneksel PowerShell dizisinden farklı olarak ArrayList dinamik olarak büyüyüp küçülebilir; bu da onu öğe sayısının önceden bilinmediği veya ihtiyaç duyulan durumlar için ideal kılar. zamanla değişmek.
PowerShell'de ArrayList kullanmanın faydaları çoktur:
- Dinamik boyut: Daha önce de belirtildiği gibi ArrayList, PowerShell'deki geleneksel dizinin aksine dinamik olarak büyüyüp küçülebilir. Bu, diziyi yeniden boyutlandırma veya veri kaybetme endişesi duymadan öğeleri kolayca ekleyebileceğiniz veya kaldırabileceğiniz anlamına gelir.
- Gelişmiş performans: ArrayList, özellikle büyük hacimli verilerle çalışırken geleneksel diziye kıyasla daha iyi performans sağlar. Bunun nedeni ArrayList'in verileri depolamak ve almak için daha verimli bir yöntem kullanmasıdır, bu da komut dosyalarınızı işlemek için gereken zamanı ve kaynakları azaltır.
- Uyumluluk: ArrayList, diğer PowerShell nesneleriyle uyumludur ve dizeler veya diziler gibi farklı veri türlerine kolayca dönüştürülebilir. Bu, onu çeşitli veri kaynakları ve formatlarıyla çalışmak için çok yönlü bir seçim haline getirir.
- Zengin yerleşik yöntemler: ArrayList, verileri işlemek ve işlemek için çeşitli yerleşik yöntemler sağlar. Bu yöntemler, diğerlerinin yanı sıra öğe eklemeyi, öğeleri kaldırmayı, sıralamayı ve aramayı içerir.
PowerShell ArrayList ve Array: Temel farklar
PowerShell ArrayList ve Array, PowerShell'de verileri depolamak ve işlemek için kullanılabilecek iki koleksiyon türüdür. Bazı benzerlikleri paylaşırken, onları ayıran bazı temel farklılıklar da var.
- ArrayList, dinamik olarak büyüyüp küçülebilen nesnelerin dinamik bir koleksiyonudur; Array ise sabit boyutlu nesnelerin statik bir koleksiyonudur. Bu, bir Dizi oluşturulduktan sonra boyutunun değiştirilemeyeceği anlamına gelir.
- ArrayList, büyük hacimli verilerle uğraşırken veya öğe sayısının önceden bilinmediği durumlarda Array'e kıyasla daha iyi performans sağlar. Bunun nedeni ArrayList'in verileri depolamak ve almak için daha verimli bir yöntem kullanmasıdır, bu da komut dosyalarınızı işlemek için gereken zamanı ve kaynakları azaltır.
- PowerShell Dizileri güçlü bir şekilde yazılmıştır (yani yalnızca belirli bir türdeki öğeleri depolayabilirler). Bunun aksine, ArrayLists herhangi bir veri tipinin değerlerini saklayabilir.
- Öte yandan Array, az sayıda öğeyle uğraşırken veya koleksiyonun boyutu sabit olduğunda daha iyi performans sunar. Bunun nedeni Array'in verileri depolamak ve almak için daha basit bir yöntem kullanmasıdır ve bu yöntem bazı durumlarda ArrayList'ten daha hızlı olabilir.
ArrayList ve Array arasında seçim yaparken, verilerinizin boyutunu ve niteliğinin yanı sıra komut dosyanızın performans gereksinimlerini de göz önünde bulundurun. PowerShell'de dizilerin kullanımına ilişkin başka bir gönderi: PowerShell'de Diziler nasıl kullanılır?
PowerShell'de ArrayList oluşturma
PowerShell'de ArrayList oluşturmak basit bir işlemdir. Aşağıdaki sözdizimini kullanarak boş bir ArrayList oluşturabilirsiniz:
$arrayList = New-Object -TypeName System.Collections.ArrayList
Bu, boş bir ArrayList'i başlatır. Alternatif olarak, yeni bir dizi listesi değişkeni oluşturmak için tür hızlandırıcıları kullanabilirsiniz:
$ArrayList = [System.Collections.ArrayList]::new()
ArrayList'i bir kapasiteyle başlat: Bir ArrayList oluştururken, onu beklenen öğe sayısına yakın bir kapasiteyle başlatmak iyi bir fikirdir. Bu, ayrılan bellek sayısını azaltmaya ve komut dosyanızın performansını artırmaya yardımcı olabilir. Örneğin, ArrayList'inizin yaklaşık 100 öğeye sahip olmasını bekliyorsanız, onu şu şekilde oluşturabilirsiniz:
$ArrayList = New-Object -TypeName System.Collections.ArrayList -ArgumentList 100
Bu, 100 öğeli boş bir dizi listesi oluşturur. Alternatif olarak, virgülle ayrılmış bir listeyi [System.Collections.ArrayList] öğesine yayınlayarak bir ArrayList oluşturabilirsiniz:
$ArrayList = [System.Collections.ArrayList]@("Banana", "Cherry", "Apple","Orange")
Her iki yöntem de, daha sonra PowerShell betiğinizdeki verileri depolamak ve işlemek için kullanabileceğiniz yeni bir ArrayList nesnesi oluşturacaktır.
Varsayılan diziden farklı olarak ArrayList, veri türlerinin bir karışımını içerebilir. Örneğin, Çalışan Numarası, Çalışan Adı ve Katılma Tarihi değerlerine sahip bir "Çalışan" ArrayList oluşturmak istediğinizi varsayalım:
$Employee = New-Object System.Collections.ArrayList
$Employee.Add(001)
$Employee.Add("Steve Johnson")
$Employee.Add([DateTime]"01/01/2021")
PowerShell ArrayList'e öğe ekleme
ArrayList'iniz oluşturulduktan sonra yerleşik Add() yönteminin yardımıyla PowerShell ArrayList'e öğe eklemek kolaydır. Bu yöntem ArrayList'in sonuna tek bir öğe eklemenizi sağlar:
$ArrayList.Add("Berry")
Alternatif olarak, bir dizi başlangıç değeriyle ArrayList'e AddRange() yöntemini kullanabilirsiniz.
$Fruits = @("Banana", "Cherry", "Date")
$ArrayList.AddRange($Fruits)
Örneğin, 1'den 5'e kadar sayıları içeren bir ArrayList oluşturmak için aşağıdaki kodu kullanabilirsiniz:
$initialValues = 1..5
$arrayList = New-Object -TypeName System.Collections.ArrayList
$arrayList.AddRange($initialValues)
Döngü yardımıyla bir dizi listesine birden çok öğe eklemenin başka bir yolu:
#Create a Array List
$ArrayList = New-Object System.Collections.ArrayList
#Add Elements to Array List
@(0..100).ForEach({$ArrayList.Add($_)})
Ayrıca Insert() yöntemi, ArrayList içindeki belirli bir dizine bir öğe eklemek için kullanılabilir:
$arrayList.Insert(0, "Plums")
Bu kod ArrayList'in başına "Erikler" ekleyecektir (indeks 0). Dizinin sıfır tabanlı olduğunu, yani ilk öğenin dizini 0, ikinci öğenin dizini 1 vb. olduğunu unutmayın.
ArrayList'te depolanan bir öğenin veri türünü almak için GetType() yöntemini kullanabilirsiniz. Örneğin.,
$ArrayList[0].GetType().Name
Öğelere Erişim ve Geri Alma
ArrayList'teki öğe sayısını almak için:
$ArrayList.Count
Bir öğeyi dizine göre almak için:
$item1 = $Arraylist[0]
$item2 = $Arraylist[1]
Öğelere standart bir PowerShell dizisi gibi erişebilirsiniz.
Son öğeyi almak için:
$LastItem = $ArrayList[-1]
Foreach ile ArrayList Üzerinden Döngü
ArrayList'teki tüm öğeleri işlemek için Foreach'i kullanın:
ForEach ($Element in $ArrayList) {
# Do something with $Element
Write-Output $Element
}
Bu, her öğe boyunca sırayla yinelenir. Count ile bir for döngüsü de kullanabilirsiniz:
For($i=0; $i -lt $Arraylist.Count; $i++) {
# Do something with $element
$element = $arraylist[$i]
Write-host $Element
}
İşte başka bir form:
$ArrayList | ForEach-Object {
Write-Host $_
}
PowerShell'de ArrayList öğelerini değiştirme
PowerShell betiğinizde bir ArrayList'e sahip olduğunuzda, öğelerini işlemek ve değiştirmek için kullanabileceğiniz çeşitli yöntemler vardır. ArrayList'teki bir öğenin değerini değiştirmek için set_Item() yöntemini veya dizi indeks gösterimini kullanabilirsiniz. Örneğin, ilk öğeyi güncellemek için şunları kullanabilirsiniz:
$ArrayList.set_Item(0, "Updated Element")
#Another way
$ArrayList[0] = "Updated Element".
Bu makalenin sonraki bölümlerinde sıralama, tersine çevirme ve arama gibi daha gelişmiş manipülasyon tekniklerini inceleyeceğiz.
PowerShell ArrayList'ten öğeleri kaldırma
PowerShell ArrayList'ten öğeleri kaldırmak, Remove(), RemoveRange() veya RemoveAt() yöntemleri kullanılarak yapılabilecek yaygın bir işlemdir. Belirli bir öğeyi veya birden fazla öğeyi kaldırmak, hatta listenin tamamını temizlemek istiyorsanız, bunu yapmanıza yardımcı olacak bir yöntem vardır. İşte nasıl:
Remove() yöntemi, belirtilen bir öğenin ilk oluşumunu kaldırırken, RemoveAt() yöntemi, belirli bir dizindeki öğeyi kaldırır.
Örneğin, “apple” öğesinin ilk oluşumunu bir ArrayList'ten kaldırmak için aşağıdaki kodu kullanabilirsiniz:
$arrayList.Remove("apple")
Yukarıdaki Kaldır yönteminin büyük/küçük harfe duyarlı olduğunu lütfen unutmayın. Dizin 3'teki öğeyi kaldırmak için aşağıdaki kodu kullanabilirsiniz:
$ArrayList.RemoveAt(3)
Bir dizi öğeyi kaldırma
RemoveRange yöntemi, başlangıç dizinini ve kaldırılacak parametrelerin sayısını belirterek bir dizi öğeyi kaldırmanıza olanak tanır:
$ArrayList.RemoveRange(0,2) # This will remove the first two elements
ArrayList'teki tüm öğeleri kaldırmak için Clear() yöntemini kullanın:
$ArrayList.Clear()
Clear() ArrayList'in tamamını boşaltır.
Bu yöntemlerin orijinal Array List nesnesini değiştirdiğini unutmayın; bu nedenle bunları dikkatli kullanın ve doğru öğeleri kaldırdığınızdan emin olun.
PowerShell ArrayList'lerini sıralama, tersine çevirme ve arama
PowerShell ArrayList, verileri işlemek ve işlemek için sıralama, geri alma ve arama gibi çeşitli yöntemler sağlar.
Bir ArrayList'i sıralamak için yerleşik Sort() yöntemini kullanabilirsiniz. Örneğin, sayıların ArrayList'ini artan düzende sıralamak için aşağıdaki kodu kullanabilirsiniz:
$ArrayList.Sort()
ArrayList dizelerini azalan düzende sıralamak için aşağıdaki kodu kullanabilirsiniz:
$ArrayList.Sort()
$ArrayList.Reverse()
Bu kod önce ArrayList'i artan sırada sıralayacak ve ardından öğeleri azalan sırada almak için sırayı tersine çevirecektir. Sort-Object cmdlet'i dizideki öğeleri sıralamak için de kullanılabilir:
$SortedArrayList = $ArrayList | Sort-Object
ArrayList'te bir öğeyi aramak için Contains() yöntemini kullanabilirsiniz. Örneğin, ArrayList'in "apple" öğesini içerip içermediğini kontrol etmek için aşağıdaki kodu kullanabilirsiniz:
if ($ArrayList.Contains("apple")) {
Write-Host "ArrayList contains 'apple'"
}
Bu kod, ArrayList'in "apple" öğesini içerip içermediğini kontrol edecek ve içeriyorsa bir mesaj yazdıracaktır.
ArrayList ve Diziler Arasında Dönüştürme
ArrayList ve standart PowerShell dizileri arasında kolayca dönüşüm yapabilirsiniz:
ArrayList'i diziye dönüştür
ArrayList'i bir diziye dönüştürmek için tür belirlemeyi şu şekilde kullanın:
$Array = [array]$ArrayList
ToArray() yöntemini de kullanabilirsiniz:
$array = $arraylist.ToArray()
Peki ya tersi? Mevcut bir diziyi ArrayList'e dönüştürmek için şunu kullanın:
$arraylist = [System.Collections.ArrayList]$array
Dizi veya ArrayList hedef türe otomatik olarak aktarılır.
PowerShell ArrayList'i dizeye dönüştürme
PowerShell ArrayList'inizi bir dizeye dönüştürmeniz gereken durumlar olabilir. Bu, -join operatörü veya String.Join() yöntemi kullanılarak kolayca yapılabilir. Örneğin, bir ArrayList dizesini virgülle ayrılmış tek bir dizeye dönüştürmek için aşağıdaki kodu kullanabilirsiniz:
$string = $arrayList -join ', '
Veya String.Join() yöntemini kullanarak:
$string = [System.String]::Join(', ', $arrayList)
Her iki yöntem de, belirtilen sınırlayıcıyla (bu durumda virgül ve boşluk) ayrılmış, ArrayList öğelerini içeren yeni bir dize oluşturacaktır.
Birden Çok ArrayList'e Katılın
Birden çok ArrayList'i birleştirmek için:
$arraylist1 = [System.Collections.ArrayList]@(1, 2, 3)
$arraylist2 = [System.Collections.ArrayList]@(4, 5, 6)
$result = $arraylist1.Clone()
$result.AddRange($arraylist2)
Clone(), orijinali değiştirmemek için $arraylist2 eklemeden önce bir kopya oluşturur.
DiziListesini Filtrele
ArrayList'teki öğeleri Where yöntemini kullanarak filtreleyebilirsiniz:
#Create a Array List with values: 1 to 10
$Values = 1..10
$ArrayList = New-Object -TypeName System.Collections.ArrayList
$ArrayList.AddRange($Values)
#Filter Array List
$Arraylist = $ArrayList.Where{$_ -ge 5}
Alternatif olarak, Dizi öğelerini Filtrelemek için Where-Object cmdlet'ini kullanabilirsiniz:
#Filter ArrayList
$MyArraylist = $ArrayList | Where-Object {$_ -ge 5}
ArrayList'i CSV'ye aktar
Diyelim ki şöyle bir ArrayList'iniz var:
$ArrayList = New-Object System.Collections.ArrayList
$ArrayList.Add("Apple")
$ArrayList.Add("Banana")
$ArrayList.Add("Cherry")
Buradaki zorluk, bu ArrayList'in basit dize verileri içermesi ve Export-Csv'nin özelliklere sahip nesneler beklemesidir. Bu sorunu çözmek için aşağıdaki gibi basit veri türlerinden özel bir nesne dizisi oluşturabilirsiniz:
#Convert ArrayList to Object array
$Objects = $ArrayList | ForEach-Object { [PSCustomObject]@{Fruit = $_} }
#Export Array to CSV
$Objects | Export-Csv -Path "C:\Temp\Fruits.csv" -NoTypeInformation
PowerShell CSV'yi ArrayList'e Aktarma
Import-Csv ve ForEach döngüsünü kullanarak bir CSV dosyasını ArrayList'e aktarabilirsiniz.
$csvData = Import-Csv -Path 'C:\Temp\Fruits.csv'
$ArrayList = New-Object System.Collections.ArrayList
ForEach ($row in $csvData) {
$ArrayList.Add($row)
}
PowerShell ArrayList'te yaygın hatalar ve sorun giderme
PowerShell ArrayList ile çalışırken bazı yaygın hatalarla veya sorunlarla karşılaşabilirsiniz. Bu bölümde bu hatalardan bazılarını tartışacağız ve bunların sorun giderme ve çözümüne yönelik ipuçları sunacağız.
- Dizin aralık dışı: Bu hata, ArrayList'te bulunmayan bir dizindeki öğeye erişmeye veya onu değiştirmeye çalıştığınızda ortaya çıkar. Bu hatayı önlemek için kullandığınız indeksin ArrayList sınırları içerisinde olduğundan daima emin olun. ArrayList'teki öğelerin sayısını almak için
Countözelliğini kullanabilirsiniz. - InvalidCastException: Bu hata, ArrayList'teki bir öğeyi uyumsuz bir veri türüne dönüştürmeye çalıştığınızda ortaya çıkar. Bu hatayı düzeltmek için söz konusu öğe için doğru veri türünü kullandığınızdan emin olun veya PowerShell ve .NET Framework tarafından sağlanan uygun dönüştürme yöntemlerini kullanın.
- Farklı veri türlerindeki öğeleri ekleme: ArrayList'te farklı veri türlerindeki öğeleri depolamak mümkün olsa da, bunu yapmak beklenmedik davranış ve performans sorunlarına yol açabilir. Bunu önlemek için ArrayList'teki tüm öğeler için tutarlı bir veri türü kullanmayı deneyin veya Hashtable veya özel bir nesne gibi farklı bir koleksiyon türü kullanmayı düşünün.
PowerShell ArrayList'in gerçek dünya uygulamaları
PowerShell ArrayList, aşağıdakiler gibi çeşitli gerçek dünya senaryolarında kullanılabilir:
- Günlük dosyası işleme: ArrayList, günlük dosyası verilerini depolamak ve işlemek için kullanılabilir; böylece günlük girişlerini verimli bir şekilde filtrelemenize, sıralamanıza ve analiz etmenize olanak tanır.
- Envanter yönetimi: PowerShell ArrayList, bilgisayar adları, IP adresleri ve donanım ayrıntıları gibi envanter verilerini depolamak ve yönetmek için kullanılabilir.
- Veri işleme: ArrayList, CSV dosyalarını ayrıştırma, XML verilerini işleme veya JSON nesnelerini işleme gibi veri işleme görevlerinde kullanılabilir.
- Komut dosyası optimizasyonu: Daha önce de belirtildiği gibi ArrayList'i kullanmak, PowerShell komut dosyalarınızın performansını artırmanıza yardımcı olabilir ve bu da onu komut dosyası optimizasyon görevleri için değerli bir araç haline getirir.
- Sık sık değişen sunucu listeleri, kullanıcılar vb. gibi sıralı koleksiyonların saklanması
- CSV'ye aktarmadan önce döngülerden ve işlem hatlarından çıktı toplama
Çözüm
ArrayLists, dinamik koleksiyonları depolamak için standart PowerShell dizilerine güçlü bir alternatif sunar. Bu kapsamlı kılavuzda, PowerShell ArrayList'in oluşturulmasından ve işlenmesinden, bu harika veri yapısındaki yaygın hataların giderilmesine kadar temellerini ele aldık. Ayrıca gerçek dünyadaki kullanım örneklerini de araştırdık ve komut dosyası performansını optimize etmeye yönelik ipuçları sağladık. ArrayList'in özelliklerini ve avantajlarını anlayarak verileri dinamik ve verimli bir şekilde kolayca depolayabilir ve değiştirebilirsiniz.
Artık PowerShell ArrayList hakkında sağlam bir anlayışa sahip olduğunuza göre, bilginizi uygulamaya koymanın ve komut dosyalarınızı optimize etmeye başlamanın zamanı geldi. PowerShell betiklerinizden en iyi şekilde yararlanmak için en iyi uygulamaları takip etmeyi ve ArrayList tarafından sağlanan yerleşik yöntemlerden yararlanmayı unutmayın.
PowerShell ArrayList ve diğer PowerShell konuları hakkında daha fazla bilgi edinmek istiyorsanız aşağıdaki kaynakları incelemeyi düşünün: Microsoft Docs - ArrayList Class

