PowerShell ile Active Directory kullanıcılarını CSV dosyasına aktarmak; envanter, denetim, lisanslama ve operasyonel raporlama için sık kullanılan işlemlerden biridir. Bu rehberde tüm domain yerine yalnız ihtiyaç duyulan kullanıcı özelliklerini sorgulayarak, isteğe bağlı OU filtresiyle temiz bir CSV çıktısı oluşturacağız.
Ön Koşullar
- Active Directory PowerShell modülü (RSAT)
- İlgili kullanıcı nesnelerini okumaya yetkili bir hesap
- Çıktı klasöründe dosya sistemi izni
Get-Module -ListAvailable ActiveDirectory
Import-Module ActiveDirectory
Tüm AD Kullanıcılarını CSV’ye Aktarma
Yalnız raporda kullanacağınız özellikleri istemek, -Properties * ile gereksiz veri çekmekten daha kontrollüdür.
$OutputPath = Join-Path $env:SystemDrive "Exports"
$OutputCsv = Join-Path $OutputPath "AD_Users.csv"
New-Item -Path $OutputPath -ItemType Directory -Force | Out-Null
$Users = Get-ADUser -Filter * -Properties DisplayName,UserPrincipalName,Enabled,Department,Title,Mail,LastLogonDate
$Users | Select-Object SamAccountName,DisplayName,UserPrincipalName,Enabled,Department,Title,Mail,LastLogonDate | Export-Csv -Path $OutputCsv -NoTypeInformation -Encoding UTF8
Belirli Bir OU’daki Kullanıcıları Aktarma
Kurumsal yapılarda hedef OU’yu -SearchBase ile sınırlandırmak daha anlamlı olabilir. Aşağıdaki DN tamamen örnektir.
$SearchBase = "OU=Users,OU=HeadOffice,DC=contoso,DC=com"
$Users = Get-ADUser -Filter * -SearchBase $SearchBase -SearchScope Subtree -Properties DisplayName,UserPrincipalName,Enabled,Department,Title,Mail
$Users | Select-Object SamAccountName,DisplayName,UserPrincipalName,Enabled,Department,Title,Mail | Export-Csv -Path $OutputCsv -NoTypeInformation -Encoding UTF8
Yalnız Etkin Kullanıcıları Aktarma
$Users = Get-ADUser -Filter 'Enabled -eq $true' -SearchBase $SearchBase -Properties DisplayName,UserPrincipalName,Department,Mail
$Users | Select-Object SamAccountName,DisplayName,UserPrincipalName,Department,Mail | Export-Csv -Path $OutputCsv -NoTypeInformation -Encoding UTF8
Tekrar Kullanılabilir Export Scripti
[CmdletBinding()]
param(
[string]$SearchBase,
[string]$OutputDirectory = (Join-Path $env:SystemDrive "Exports")
)
Import-Module ActiveDirectory -ErrorAction Stop
if (-not (Test-Path $OutputDirectory)) {
New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null
}
$OutputCsv = Join-Path $OutputDirectory ("AD_Users_{0}.csv" -f (Get-Date -Format "yyyyMMdd_HHmm"))
$params = @{
Filter = '*'
Properties = @('DisplayName','UserPrincipalName','Enabled','Department','Title','Mail','LastLogonDate','WhenCreated')
}
if ($SearchBase) {
$params.SearchBase = $SearchBase
$params.SearchScope = 'Subtree'
}
$Users = Get-ADUser @params | Select-Object SamAccountName,DisplayName,UserPrincipalName,Enabled,Department,Title,Mail,LastLogonDate,WhenCreated
$Users | Export-Csv -Path $OutputCsv -NoTypeInformation -Encoding UTF8
Write-Host "Aktarılan kullanıcı: $(@($Users).Count)"
Write-Host "CSV: $OutputCsv"
Doğrulama
Ben export işleminden sonra yalnız dosyanın oluşmasına bakmam. AD sorgusundaki nesne sayısı ile CSV çıktısının beklenen kapsamı temsil ettiğini, sütunların doğru geldiğini ve OU filtresinin yanlış kapsamı çekmediğini kontrol ederim.
$Users.Count
Test-Path $OutputCsv
Import-Csv $OutputCsv | Select-Object -First 5
Sık Karşılaşılan Sorunlar
ActiveDirectory modülü bulunamıyor
RSAT/Active Directory PowerShell bileşenini Get-Module -ListAvailable ActiveDirectory ile doğrulayın.
SearchBase geçersiz
OU’nun Distinguished Name değerini doğrulayın. Yanlış DN sorgunun başarısız olmasına veya yanlış kapsam üretmesine neden olabilir.
CSV’de gereksiz sütunlar var
-Properties * yerine yalnız raporda kullanılacak attribute’ları isteyin ve Select-Object ile çıktı şemasını belirleyin.
Güvenlik ve Best Practice
- Export için Domain Admin gibi yüksek yetkili hesap kullanmayın; gerekli okuma yetkisi yeterlidir.
- CSV’nin kurumsal kullanıcı verileri içerebileceğini dikkate alın.
- Raporları erişimi kontrollü konumda saklayın.
- Büyük yapılarda sorguyu OU ve gerekli attribute’larla sınırlandırın.
İlgili Rehberler
Kullanıcı raporuna ek olarak AD gruplarını ve bilgisayar envanterini CSV dosyasına aktarmak için PowerShell ile AD Kullanıcı ve Bilgisayarları Dışa Aktarma Komutları rehberine geçebilirsiniz.
OU bazında kullanıcı ve bilgisayar sayılarını raporlamak için OU Bazlı Kullanıcı ve Bilgisayar Sayımı rehberine; cmdlet ve pipeline örnekleri için PowerShell Komutları merkezine geçebilirsiniz.
Sonuç
Get-ADUser, Select-Object ve Export-Csv birlikte kullanıldığında Active Directory kullanıcı raporlarını tekrarlanabilir bir operasyona dönüştürür. Sağlıklı yaklaşım, tüm attribute’ları toplamak yerine raporun amacına uygun alanları ve arama kapsamını açıkça tanımlamaktır.
