PowerShell'de Export-CSV nasıl kullanılır?


PowerShell ile Active Directory veya Microsoft 365 gibi hizmetlerden her türlü bilgiyi çıkartabilirsiniz. Ancak bazen bu bilgileri Excel veya başka bir sistemde daha fazla işlemeniz gerekebilir. Bunu yapmak için PowerShell'deki Export-CSV işlevini kullanabiliriz.

Export-CSV işlevi, PowerShell nesnelerini bir CSV dizesine dönüştürür ve bunları bir CSV dosyasına kaydeder. Yalnızca bir CSV dizesine ihtiyacınız varsa PowerShell'de ConvertTo-CSV işlevini de kullanabilirsiniz.

Bu yazımızda Export-CSV fonksiyonunun nasıl kullanılacağına, yaygın hataların nasıl önleneceğine ve kullanabileceğiniz farklı seçeneklerin neler olduğuna bir göz atacağız.

PowerShell Dışa Aktarma-CSV

Export-CSV cmdlet'i oldukça basittir ve yararlı olan yalnızca birkaç özelliğe sahiptir:

  • Yol - (Gerekli) CSV dosyasının konumu
  • NoTypeInformation - Çıkıştan Tür bilgisi başlığını kaldırır. PowerShell 6'da artık gerekli değil
  • Sınırlayıcı - Varsayılan virgüldür ancak onu değiştirebilirsiniz
  • Ekle - Mevcut bir CSV dosyasına ekleyin
  • Zorla - Ekle ile birlikte kullanışlıdır
  • NoClobber - Mevcut dosyaların üzerine yazmayın
  • UseQuotes - (yalnızca PowerShell 7) değerleri tırnak içine alın veya alın

Microsoft 365 kullanıcılarımızı bir CSV dosyasına aktararak basit bir şeyle başlayacağız. Buradaki örnekler boyunca Azure AD'yi kullanacağım, dolayısıyla devam etmek istiyorsanız önce Azure AD'yi bağladığınızdan emin olun.

Get-AzureADUser cmdlet'i, aşağıdaki ekran görüntüsünde görebileceğiniz gibi Microsoft 365 kiracınızdaki tüm kullanıcıları döndürür. Yapacağımız şey bu çıktıyı bir CSV dosyasına aktarmak. Bunu yapmak için Export-CSV cmdlet'ini arkasına aktarabiliriz:

Get-AzureADUser | Export-Csv c:\temp\azureadusers.csv -NoTypeInformation

Kulağa kolay geliyor değil mi? CSV dosyasını açarsanız, ihtiyacımız olandan biraz daha fazlasını elde ettiğimizi ve daha önce PowerShell'de gördüğümüz güzel listenin olmadığını fark edeceksiniz.

Peki bu neden oluyor? Export-CSV cmdlet'i, Get-AzureADUser cmdlet'indeki tüm bağımsız nesneleri dışa aktarır. Tek bir Azure AD kullanıcısını ararsak tek bir kullanıcı nesnesinden döndürülen tüm verileri görebilirsiniz:

 Get-AzureADUser -Filter "Displayname eq 'Rudy Mens'" | select *

Export-CSV ile doğru bilgiler nasıl dışa aktarılır

Yapmamız gereken, kullanıcı nesnelerini bir CSV dosyasına aktarmadan önce ihtiyacımız olan doğru bilgileri (özellikleri) seçmektir.

Get-AzureADUser | select userprincipalname, displayname, jobtitle, department, city | Export-CSV c:\temp\azureaduser.csv -NoTypeInformation

Bu, her kullanıcıdan seçilen alanları gerçekten kullanabileceğimiz güzel bir CSV dosyasında döndürecektir:

PowerShell ile CSV dosyasına ekleme

Bazı durumlarda PowerShell ile CSV dosyasına bilgi eklemek isteyebilirsiniz. Diyelim ki her kullanıcının yöneticisini listeye eklemek istiyoruz. Bunu yapmanın daha etkili bir yolu var ama bu durumda tüm kullanıcılar arasında döngü yapıp yöneticiyi Azure AD'den alacağız.

Tavsiye

Bu eksiksiz kılavuzda PowerShell Komut Dosyaları oluşturma hakkında daha fazla bilgi edinin

Bu örnekte kullanıcı bilgilerini ve yöneticiyi tutacak özel bir PowerShell nesnesi oluşturuyoruz. -append anahtarıyla kullanıcıyı CSV dosyasına ekleyebiliriz.

$users = Get-AzureADUser

$users | ForEach-Object {
    $Manager = Get-AzureADUserManager -ObjectId $_.ObjectId
    
    $user =[pscustomobject]@{
        'Displayname' = $_.displayname
        'Jobtitle' = $_.jobtitle
        'Department' = $_.Department
        'Manager' = $manager.displayname
    }
    $user | Export-CSV c:\temp\usermanager.csv -Append -NoTypeInformation -Force
}

-Force anahtarını da ekledim. Bu şekilde CSV dosyası mevcut değilse oluşturulacak ve eşleşmeyen özelliklere sahip nesneler yine de CSV dosyasına yazılabilecektir. Yalnızca eşleşen özellikleri yazacaktır, ancak diğer özellikler atılır.

PowerShell'deki diğer yararlı Export-CSV parametreleri

PowerShell'de Export-CSV cmdlet'ini kullanırken yararlı olabilecek birkaç parametre daha vardır.

NoClobber

Varsayılan olarak Export-CSV cmdlet'i kullanıldığında mevcut herhangi bir dosyanın üzerine yazar. Eğer bunu istemiyorsanız -NoClobber parametresini ekleyebilirsiniz. Bu şekilde, eğer dosya zaten mevcutsa, dosyanın üzerine yazmanızı engelleyen bir hata alırsınız.

Sınırlayıcı

Virgülle Ayrılmış Değerler Dosyasındaki (CSV) değerler varsayılan olarak virgülle ayrılır. Tüm uygulamalar bu standarda uymaz. Dolayısıyla, örneğin noktalı virgül ( ; ) gerektiren başka bir uygulamaya veri aktarmanız gerektiğinde sınırlayıcıyı değiştirebilirsiniz.

Yeni sınırlayıcıyı tırnak içine aldığınızdan emin olun:

Get-AzureADUser | Select-Object -Property userprincipalname, displayname, jobtitle, department, city | Export-CSV c:\temp\azureaduser.csv -NoTypeInformation -Delimiter ';'

KullanımAlıntılar

PowerShell 5 veya 6'da nesneleri dışarı aktardığınızda tüm değerler tırnak işaretleri içine alınır. Bazı durumlarda bunu istemeyebilirsiniz. PowerShell 7 kullanıyorsanız -UseQuotes parametresini kullanabilirsiniz.

Bu parametrenin birkaç seçeneği vardır:

  • Gerektiğinde
  • Her zaman (varsayılan)
  • Asla
 Get-Process | export-csv -Path c:\temp\process.csv -UseQuotes AsNeeded

Kapanış

Export-CSV cmdlet'i oldukça sık kullandığım bir PowerShell işlevidir. Raporlar veya diğer görevler için verileri Microsoft 365'ten hızlı bir şekilde çıkarmak gerçekten faydalıdır. Nesneleri dışa aktarırken öncelikle doğru özellikleri seçtiğinizden emin olun. Bu, PowerShell verilerini Excel'e aktarma konusunda en sık yapılan hatadır.

Herhangi bir sorunuz varsa aşağıya bir yorum bırakmanız yeterli.

İlgili makaleler