AD’den “şu bilgileri bana bir Excel’e döker misin?” talebi, BT’de neredeyse her hafta karşılaşılan bir istek. Bu yazıda, kullanıcı ve bilgisayar verilerini PowerShell ile hızlıca dışa aktarmanın pratik yollarını, en sık işime yarayan filtrelerle birlikte derledim.
Başlamadan Önce: Modülü Yükleme
Import-Module ActiveDirectory
Mini tüyo: Modül bulunamıyorsa, RSAT (Remote Server Administration Tools) kurulu olmayabilir. Windows 10/11’de Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 ile kurabilirsiniz.
1. Kullanıcı Bilgilerini Çekmek
Temel Kullanıcı Listesi
Get-ADUser -Filter * -Properties DisplayName, EmailAddress, Department, Title |
Select-Object Name, DisplayName, EmailAddress, Department, Title |
Export-Csv -Path "C:\Raporlar\tum_kullanicilar.csv" -NoTypeInformation -Encoding UTF8
Mini tüyo: -Encoding UTF8 parametresini unutmayın — aksi halde Türkçe karakterler (ı, ş, ğ, ü, ö, ç) Excel’de bozuk görünür.
Sadece Aktif (Enabled) Kullanıcılar
Get-ADUser -Filter {Enabled -eq $true} -Properties DisplayName, EmailAddress, LastLogonDate |
Select-Object Name, EmailAddress, LastLogonDate |
Export-Csv -Path "C:\Raporlar\aktif_kullanicilar.csv" -NoTypeInformation -Encoding UTF8
Belirli Bir OU’daki (Departman) Kullanıcılar
Get-ADUser -Filter * -SearchBase "OU=Muhasebe,OU=Kullanicilar,DC=sirket,DC=local" -Properties EmailAddress |
Select-Object Name, EmailAddress |
Export-Csv -Path "C:\Raporlar\muhasebe_kullanicilari.csv" -NoTypeInformation -Encoding UTF8
Mini tüyo: OU yolunu (DistinguishedName) bilmiyorsanız, Get-ADOrganizationalUnit -Filter * | Select Name, DistinguishedName ile tüm OU’ları listeleyip kopyalayabilirsiniz.
Belirli Bir Gruba Üye Olan Kullanıcılar
Get-ADGroupMember -Identity "GRP-Muhasebe" |
Get-ADUser -Properties EmailAddress, Title |
Select-Object Name, EmailAddress, Title |
Export-Csv -Path "C:\Raporlar\grup_uyeleri.csv" -NoTypeInformation -Encoding UTF8
Şifresi Yakında Dolacak Kullanıcılar
Get-ADUser -Filter {Enabled -eq $true} -Properties DisplayName, "msDS-UserPasswordExpiryTimeComputed" |
Select-Object Name, @{N='ParolaBitis';E={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}} |
Where-Object {$_.ParolaBitis -lt (Get-Date).AddDays(14)} |
Export-Csv -Path "C:\Raporlar\parola_bitecekler.csv" -NoTypeInformation -Encoding UTF8
2. Bilgisayar (Computer) Bilgilerini Çekmek
Temel Bilgisayar Listesi
Get-ADComputer -Filter * -Properties OperatingSystem, OperatingSystemVersion, LastLogonDate |
Select-Object Name, OperatingSystem, OperatingSystemVersion, LastLogonDate |
Export-Csv -Path "C:\Raporlar\tum_bilgisayarlar.csv" -NoTypeInformation -Encoding UTF8
Sadece Sunucular
Get-ADComputer -Filter {OperatingSystem -like "*Server*"} -Properties OperatingSystem, IPv4Address |
Select-Object Name, OperatingSystem, IPv4Address |
Export-Csv -Path "C:\Raporlar\sunucular.csv" -NoTypeInformation -Encoding UTF8
90 Gündür “Görünmeyen” (İnaktif) Bilgisayarlar
Bu, AD hijyeni için en çok kullandığım sorgulardan biri — eski/kullanılmayan bilgisayar hesaplarını temizlemenin ilk adımı:
Get-ADComputer -Filter * -Properties LastLogonDate, OperatingSystem |
Where-Object {$_.LastLogonDate -lt (Get-Date).AddDays(-90)} |
Select-Object Name, OperatingSystem, LastLogonDate |
Sort-Object LastLogonDate |
Export-Csv -Path "C:\Raporlar\inaktif_bilgisayarlar.csv" -NoTypeInformation -Encoding UTF8
Belirli Bir Windows Sürümündeki Cihazlar
Örneğin, hâlâ Windows 10 çalıştıran cihazları bulup Windows 11 geçiş planlaması yapmak için:
Get-ADComputer -Filter {OperatingSystem -like "*Windows 10*"} -Properties OperatingSystem |
Select-Object Name, OperatingSystem |
Export-Csv -Path "C:\Raporlar\windows10_cihazlar.csv" -NoTypeInformation -Encoding UTF8
3. Zaman Kazandıran Mini Tüyolar
Tüyo 1: GridView ile Anında Önizleme
CSV’ye kaydetmeden önce sonucu hızlıca görmek isterseniz, Export-Csv yerine Out-GridView kullanın — filtrelenebilir, sıralanabilir bir pencere açar:
Get-ADUser -Filter * -Properties Department | Select Name, Department | Out-GridView
Tüyo 2: Tarih Damgalı Dosya Adı
Raporları düzenli çalıştırıyorsanız, dosya adına otomatik tarih eklemek karışıklığı önler:
$tarih = Get-Date -Format "yyyy-MM-dd" Get-ADUser -Filter * | Export-Csv -Path "C:\Raporlar\kullanicilar_$tarih.csv" -NoTypeInformation -Encoding UTF8
Tüyo 3: Belirli Özellikleri Tek Seferde Keşfetmek
Bir kullanıcı/bilgisayar nesnesinde hangi özelliklerin (attribute) mevcut olduğunu bilmiyorsanız:
Get-ADUser -Identity "ornek.kullanici" -Properties * | Get-Member -MemberType Property | Select Name
Bu komut, o nesnede sorgulanabilecek tüm özellik adlarını listeler — “acaba bu bilgiye nasıl ulaşırım” sorusuna hızlı cevap.
Tüyo 4: Excel’de Doğrudan Açılabilir Format
Export-Csv varsayılan olarak virgülle ayrılmış dosya üretir; Türkçe Excel kurulumlarında bazen noktalı virgül (;) beklenir. Sorun yaşarsanız -Delimiter ";" parametresini ekleyin:
Get-ADUser -Filter * | Export-Csv -Path "rapor.csv" -NoTypeInformation -Encoding UTF8 -Delimiter ";"
Tüyo 5: Birden Fazla Sorguyu Tek Dosyada Birleştirmek
Kullanıcı ve yöneticisini aynı satırda görmek gibi ilişkisel bilgi gerektiğinde:
Get-ADUser -Filter * -Properties Manager, EmailAddress | ForEach-Object {
[PSCustomObject]@{
Kullanici = $_.Name
Email = $_.EmailAddress
Yonetici = if ($_.Manager) { (Get-ADUser $_.Manager).Name } else { "Tanımsız" }
}
} | Export-Csv -Path "C:\Raporlar\kullanici_yonetici.csv" -NoTypeInformation -Encoding UTF8
Bir talep geldiğinde komutu sıfırdan yazmak yerine, kendinize ait bir “script kütüphanesi” klasöründen hazır olanı çalıştırmak hem hız hem de tutarlılık kazandırıyor — bu yüzden yukarıdaki komutları tek tek ezberlemek yerine, bir .ps1 dosyasında biriktirmenizi öneririm.