PowerShell

PowerShell ile Active Directory OU Bazlı Kullanıcı ve Bilgisayar Sayımı

Saha notu / teknik rehber Son kontrol 7 Ekim 2026 Konu merkezine dön →
Tolga CEYHAN Sistem Yönetimi & IT

Active Directory’de kullanıcı ve bilgisayar sayılarını OU bazında görmek; envanter kontrolü, OU temizliği, taşıma planı ve operasyonel raporlama sırasında yararlı olabilir. Bu rehberde PowerShell ile her OU için doğrudan nesne sayısını ve istenirse alt OU’ları kapsayan toplam sayıyı çıkaracağız.

Ön Koşullar

  • RSAT Active Directory PowerShell modülü
  • OU ve kullanıcı/bilgisayar nesnelerini okumaya yetkili hesap
  • Raporlanacak OU yapısının Distinguished Name bilgisinin doğrulanması
Import-Module ActiveDirectory -ErrorAction Stop
Get-ADDomain
Get-ADOrganizationalUnit -Filter * | Select-Object -First 10 Name,DistinguishedName

Domain Genelindeki Kullanıcı ve Bilgisayar Sayısı

$UserCount = (Get-ADUser -Filter *).Count
$ComputerCount = (Get-ADComputer -Filter *).Count
[PSCustomObject]@{
    Users = $UserCount
    Computers = $ComputerCount
}

Büyük yapılarda yalnız ihtiyacınız olan OU’yu -SearchBase ile sınırlandırmak daha kontrollüdür.

Belirli Bir OU İçindeki Nesneleri Sayma

Aşağıdaki DN örnektir. OneLevel yalnız hedef OU’nun doğrudan altındaki nesneleri sayar.

$SearchBase = "OU=HeadOffice,DC=contoso,DC=com"
$Users = (Get-ADUser -Filter * -SearchBase $SearchBase -SearchScope OneLevel).Count
$Computers = (Get-ADComputer -Filter * -SearchBase $SearchBase -SearchScope OneLevel).Count
[PSCustomObject]@{
    OU = $SearchBase
    Users = $Users
    Computers = $Computers
}

Alt OU’ları da Dahil Etmek

Hedef OU’nun tüm alt ağacını saymak için Subtree kullanabilirsiniz.

$Users = (Get-ADUser -Filter * -SearchBase $SearchBase -SearchScope Subtree).Count
$Computers = (Get-ADComputer -Filter * -SearchBase $SearchBase -SearchScope Subtree).Count

Tüm OU’lar İçin Kullanıcı ve Bilgisayar Raporu

Aşağıdaki script her OU’yu dolaşır ve yalnız o OU seviyesindeki kullanıcı/bilgisayar sayılarını raporlar. Böylece alt OU nesnelerinin üst OU toplamına tekrar eklenmesinden kaçınılır.

Import-Module ActiveDirectory -ErrorAction Stop
$OUs = Get-ADOrganizationalUnit -Filter * | Sort-Object DistinguishedName
$Report = foreach ($OU in $OUs) {
    $UserCount = (Get-ADUser -Filter * -SearchBase $OU.DistinguishedName -SearchScope OneLevel).Count
    $ComputerCount = (Get-ADComputer -Filter * -SearchBase $OU.DistinguishedName -SearchScope OneLevel).Count
    [PSCustomObject]@{
        OU = $OU.Name
        DistinguishedName = $OU.DistinguishedName
        Users = $UserCount
        Computers = $ComputerCount
    }
}
$Report | Format-Table -AutoSize

Raporu CSV’ye Aktarma

$OutputDirectory = Join-Path $env:SystemDrive "Exports"
$OutputCsv = Join-Path $OutputDirectory "AD_OU_Inventory.csv"
New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null
$Report | Export-Csv -Path $OutputCsv -NoTypeInformation -Encoding UTF8

Doğrulama

OU raporlarında en kritik nokta OneLevel ile Subtree farkıdır. Ben önce birkaç bilinen OU üzerinde sonucu yönetim konsolundaki nesnelerle karşılaştırırım; ardından raporu tüm yapıya uygularım.

$Report | Sort-Object Users -Descending | Select-Object -First 10
$Report | Measure-Object -Property Users -Sum
$Report | Measure-Object -Property Computers -Sum

Performans ve Troubleshooting

Çok sayıda OU bulunan yapılarda her OU için ayrı LDAP sorgusu çalıştırmak zaman alabilir. Amaç yalnız domain toplamını bulmaksa OU döngüsü kullanmayın. OU bazlı dağılım gerekiyorsa script’i kontrollü bir yönetim istasyonundan çalıştırın.

SearchBase hatası: Distinguished Name değerini Get-ADOrganizationalUnit ile doğrulayın.

Beklenenden yüksek sayı: Subtree kullandığınızda alt OU nesnelerinin de dahil edildiğini unutmayın.

Güvenlik ve Best Practice

  • Sayım için yüksek ayrıcalıklı yönetici hesabı kullanmayın.
  • Gerçek domain adlarını veya kurum içi OU yapısını paylaşılacak scriptlere gömmeyin.
  • Raporları erişim kontrollü konumlarda saklayın.
  • Script’i önce sınırlı bir OU üzerinde doğrulayın.

İlgili Rehberler

Kullanıcı attribute’larını CSV olarak raporlamak için AD Kullanıcılarını CSV’ye Aktarma rehberini; Active Directory mimarisi için Active Directory Nedir? rehberini kullanabilirsiniz.

Sonuç

PowerShell ile OU bazlı kullanıcı ve bilgisayar sayımı yapılırken önce rapor kapsamı belirlenmelidir. OneLevel doğrudan OU seviyesini, Subtree ise alt OU’ları da kapsar. Bu ayrımı doğru yapmak envanter raporlarında yanlış toplamların önüne geçer.

PROFESYONEL PROFİL

Bu teknik içeriğin arkasındaki deneyimi inceleyin.

Microsoft altyapıları, Active Directory, SCCM, PowerShell, Windows Server ve VMware odaklı teknik profil ve proje çalışmaları.

Projeler & Vaka Çalışmalarıİngilizce Profil

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir