PowerShell: Bir Diziyi CSV Dosyasına Nasıl Aktarırım?
PowerShell, güçlü otomasyon ve yönetim yetenekleri sağlayan çok yönlü bir betik dili ve komut satırı kabuğudur. Bir PowerShell kullanıcısı olarak kendinizi bir diziyi CSV dosyasına aktarmanız gereken bir durumda bulmuş olabilirsiniz. Bu blog yazısında, PowerShell kullanarak bir diziyi CSV (Virgülle Ayrılmış Değerler) dosyasına nasıl aktaracağımızı inceleyeceğiz. CSV dosyaları, basitlikleri ve uyumlulukları nedeniyle uygulamalar ve platformlar arasında veri alışverişinde yaygın olarak kullanılır. Bu yazının sonunda, çeşitli teknikleri kullanarak bir diziyi CSV dosyasına nasıl aktaracağınızı anlayacaksınız.
PowerShell'de Dizileri ve CSV Dosyalarını Anlama
Diziler, tek bir değişkende saklanan öğelerin koleksiyonlarıdır. Bir dizideki her öğeye bir dizin numarası kullanılarak erişilebilir. Diziler, ilgili verileri birlikte gruplandırmanıza ve tek bir varlık olarak değiştirmenize olanak tanıdığından, PowerShell'de veri depolamak için yaygın olarak kullanılır.
Dizi, tek bir değişkende saklanan öğelerin koleksiyonudur. Basit bir dizinin nasıl oluşturulacağına dair bir örnek:
$Array = @(1, 2, 3, 4, 5)
CSV dosyaları, tablo verilerini yapılandırılmış bir biçimde depolayan düz metin dosyalarıdır. CSV dosyasındaki her satır bir kaydı, her sütun ise bu kayıttaki bir alanı temsil eder. CSV dosyaları genellikle farklı uygulamalar ve veritabanları arasında veri alışverişi yapmak için kullanılır.
PowerShell'de bir diziyi CSV dosyasına aktarmanın birkaç yolu vardır. Bu yazıda üç yöntemi ele alacağız: Export-Csv cmdlet'i, ForEach döngüsüyle İçerik Ekle ve ForEach döngüsüyle Out-File.
Yöntem 1: Export-Csv Cmdlet'ini Kullanma
Export-Csv cmdlet'i, bir diziyi CSV dosyasına aktarmanın en basit yöntemidir. Bu cmdlet, nesneleri bir CSV dosyasına aktarır ve bunları virgülle ayrılmış bir dizi değere dönüştürür. İşte bir örnek:
$array = @(1, 2, 3, 4, 5)
$array | Export-Csv -Path "ArrayExport.csv" -NoTypeInformation
Ancak bu yöntem basit dizilerde beklendiği gibiçalışmayacaktır.
Export-Csv cmdlet'ini kullanmak için ona bir nesne girmemiz gerekir. Bunu nasıl yapacağınız aşağıda açıklanmıştır:
$array = @(1, 2, 3, 4, 5)
$arrayObjects = $array | ForEach-Object {
[PSCustomObject]@{'Value' = $_}
}
$arrayObjects | Export-Csv -Path "C:\Temp\ArrayExport.csv" -NoTypeInformation
Benzer şekilde, PowerShell kullanarak bir dize dizisini dışa aktarırsanız CSV yalnızca uzunluğu gösterir!
#String Array
$Array = @("apple", "orange", "banana", "kiwi")
#Export array to CSV
$Array | Export-CSV -Path "C:\Temp\Array.csv" -NoTypeInformation
Çıktı :
"Length"
"5"
"6"
"6"
"4"
Bunun nedeni, Export-Csv cmdlet'inin nesneleri girdi olarak alması ve nesne özellikleri ve değerleri tablosunu dışa aktarmasıdır. Komut dosyanız dize nesneleri ürettiğinden ve bunların sahip olduğu tek özellik uzunluk olduğundan, elde ettiğiniz şey budur. Dolayısıyla, bu sorunun üstesinden gelmek için özel bir PSObject döndüren "Select-Object" cmdlet'ini kullanmamız gerekiyor.
#String Array
$Array = @("apple", "orange", "banana", "kiwi")
#Convert Array to Object Array - using Select-Object cmdlet
$ObjArray = $Array | Select-Object @{Name='Name';Expression={$_}}
#Export Object Array to
$ObjArray | Export-Csv "C:\Temp\ArrayExport.csv" -NoTypeInformation
PowerShell Kullanarak Bir Diziyi CSV'ye Aktarma
Bu örnekte, $Array adında üç nesne içeren bir dizi oluşturuyoruz. Her nesnenin üç özelliği vardır: Ad, Yaş ve Şehir (Çok boyutlu diziye benzer). Özelliklere sahip özel nesneler oluşturmak için PSCustomObject sınıfını kullanırız. Bir diziye sahip olduğunuzda, Export-Csv cmdlet'ini kullanarak onu bir CSV dosyasına aktarabilirsiniz. $Array dizisinin "C:\Temp" klasöründeki data.csv adlı bir CSV dosyasına nasıl aktarılacağına dair bir örnek:
#Define Array
$Array = @( [PSCustomObject]@{ Name = "John"; Age = 30; City = "New York" },
[PSCustomObject]@{ Name = "Jane"; Age = 25; City = "Los Angeles" },
[PSCustomObject]@{ Name = "Bob"; Age = 40; City = "Chicago" }
)
#Export array to CSV
$Array | Export-Csv -Path "C:\Temp\data.csv" -NoTypeInformation
Bu örnekte, $Array dizisini Export-Csv cmdlet'ine aktarıyoruz. -Path parametresi CSV dosyasının yolunu ve dosya adını belirtir. -NoTypeInformation parametresi, PowerShell'in CSV dosyasına tür bilgisi üstbilgisi eklemesini engeller. Betik çalışır ve “C:\Temp” dizininde CSV formatındaki dizideki verileri içeren Data.csv adında yeni bir dosya oluşturur.
Belirli Sütunlara Sahip Dizileri Dışa Aktarma
Çok sayıda sütun içeren bir diziniz varsa ve bu sütunların yalnızca bir alt kümesini dışa aktarmak istiyorsanız Select-Object cmdlet'ini kullanabilirsiniz. Örneğin, beş sütunlu bir diziniz varsa ve yalnızca ilk üç sütunu dışa aktarmak istiyorsanız aşağıdaki komutu kullanabilirsiniz:
$Array | Select-Object Column1, Column2, Column3 | Export-Csv -Path "data.csv" -NoTypeInformation
Birden Çok Diziyi PowerShell'den CSV'ye Aktarma
Birden fazla diziyi tek bir CSV dosyasına aktarmak aynı zamanda Export-CSV cmdlet'ini de gerektirir. Bu görevi + (artı) sembolünü kullanarak dizi içeriklerini birleştirerek gerçekleştiriyoruz. İşte bir örnek:
#Define Arrays
$Array1 = @(1,2,3,4)
$Array2 = @(5,6,7,8)
$Array3 = $Array1 + $Array2
$ResultArray = @()
#Convert Array to object
ForEach ($Item in $Array3)
{
$ResultArray+=[pscustomobject]@{Result = $item }
}
#Export Array to CSV
$ResultArray | Export-Csv -Path "C:\Temp\Array.csv" -NoTypeInformation
Bu örnekte, iki dizi ($dizi1, $dizi2) oluşturuyoruz, bunları $Array3 ile birleştiriyoruz ve elde edilen birleştirilmiş diziyi bir CSV dosyasına aktarıyoruz.
Yöntem 2: ForEach Döngüsüyle İçerik Ekleme Kullanımı
Bir diziyi CSV dosyasına aktarmanın başka bir yolu, Add-Content cmdlet'ini ForEach döngüsüyle birlikte kullanmaktır. Bu yöntem, yeni bir dosya oluşturmanıza veya mevcut bir dosyaya veri eklemenize olanak tanır. İşte bir örnek:
#Define Array
$Array = @(1, 2, 3, 4, 5)
$CSVFile = "C:\Temp\ArrayExport.csv"
#Remove the CSV if exists
If (Test-Path -Path $CSVFile) { Remove-Item -Path $CSVFile -Force}
#Set Header
$Header = "Value"
#Add Header to the CSV file
Add-Content -Path $CSVFile -Value $Header
#Add content to the CSV
ForEach ($Item in $Array) {
Add-Content -Path $CSVFile -Value $Item
}
CSV dosyasının mevcut olup olmadığını kontrol ettiğimizi ve onu sildiğimizi unutmayın. Bunun nedeni, İçerik Ekle cmdlet'inin varsayılan olarak mevcut dosyaya eklenmesidir.
Yöntem 3: Out-File'ı ForEach Döngüsüyle Kullanma
Out-File, bir diziyi CSV dosyasına aktarmak için kullanılabilecek başka bir cmdlet'tir. Bu cmdlet çıktıyı konsol yerine bir dosyaya gönderir. İşte bir örnek:
$array = @(1, 2, 3, 4, 5)
$header = "Value"
$header | Out-File -FilePath "C:\Temp\ArrayExport.csv"
ForEach ($item in $array) {
$item | Out-File -FilePath "C:\Temp\ArrayExport.csv" -Append
}
Çözüm
Bu blog yazısında, PowerShell'de bir diziyi CSV dosyasına aktarmanın üç yöntemini ele aldık: Export-Csv cmdlet'i, ForEach döngüsüyle İçerik Ekle ve ForEach döngüsüyle Out-File. Her yöntemin kendine göre avantajları vardır ve ihtiyacınıza en uygun olanı kullanabilirsiniz.


