PowerShell

PowerShell AD Kullanıcı Oluşturma ve Mailbox Atama (Tam Otomasyon)

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

Yeni bir çalışan için Active Directory hesabı oluşturmak basit görünür; ancak kullanıcı adı standardı, doğru OU, grup üyelikleri, ilk parola, UPN, lisans ve bulut servisleri devreye girdiğinde süreç hızla karmaşıklaşır. PowerShell ile bu adımların önemli bölümü standartlaştırılabilir ve kayıt altına alınabilir.

Amaç ve Kapsam

Bu rehberde odak noktamız güvenli ve tekrar edilebilir bir AD kullanıcı onboarding akışı oluşturmaktır. Active Directory hesabının CSV’den oluşturulması, doğru OU’ya yerleştirilmesi, temel özniteliklerin atanması, başlangıç parolasının güvenli yönetimi ve işlem sonu doğrulaması ele alınır. Microsoft 365, Exchange Online ve Teams entegrasyonu ise ayrı bir katman olarak konumlandırılır.

Ön Koşullar

  • Active Directory PowerShell modülü
  • Kullanıcı oluşturma ve ilgili OU’ya yazma yetkisi
  • Kurumun kullanıcı adı, UPN ve OU standardının belirlenmiş olması
  • CSV dosyasının yetkili kişilerce hazırlanması
  • Üretim öncesinde lab veya test OU’sunda doğrulama

Neden Tek Parça Dev Script Yerine Aşamalı Otomasyon?

Eski sürümde AD, AzureAD, Exchange, OneDrive, Teams ve SMTP işlemleri tek script içinde birleştirilmişti. Bu yaklaşım hata ayıklamayı zorlaştırır ve kimlik bilgilerini script içine gömme riskini artırır. Daha sağlıklı tasarımda süreç katmanlara ayrılır:

  1. Girdi doğrulama
  2. AD hesabı oluşturma
  3. Grup ve OU işlemleri
  4. AD doğrulama
  5. Entra ID / Microsoft 365 senkronizasyonunu bekleme
  6. Bulut lisans ve servis işlemleri
  7. Loglama ve bildirim

Örnek CSV Yapısı

FirstName,LastName,Username,Department,Title,OU
Ahmet,Yilmaz,ahmet.yilmaz,IT,System Administrator,"OU=Users,OU=HQ,DC=example,DC=local"
Elif,Kara,elif.kara,Finance,Accountant,"OU=Users,OU=HQ,DC=example,DC=local"

CSV dosyasında gerçek üretim domain’i, hassas kullanıcı verileri veya parola tutulmamalıdır.

CSV Girdisini Önce Doğrulama

$Users = Import-Csv 'C:ScriptsNewUsers.csv'

$Users | Format-Table FirstName, LastName, Username, Department, OU -AutoSize

Toplu kullanıcı oluşturmadan önce boş alan, hatalı OU path veya tekrar eden kullanıcı adı gibi durumlar kontrol edilmelidir.

AD Kullanıcı Oluşturma

Aşağıdaki örnek yalnızca Active Directory tarafını kapsar ve placeholder domain kullanır:

Import-Module ActiveDirectory

$DomainUpn = 'example.local'
$Users = Import-Csv 'C:ScriptsNewUsers.csv'

foreach ($User in $Users) {
    $ExistingUser = Get-ADUser -Filter "SamAccountName -eq '$($User.Username)'" -ErrorAction SilentlyContinue

    if ($ExistingUser) {
        Write-Warning "Kullanıcı zaten mevcut: $($User.Username)"
        continue
    }

    $InitialPassword = Read-Host "İlk parola - $($User.Username)" -AsSecureString

    New-ADUser `
        -Name "$($User.FirstName) $($User.LastName)" `
        -GivenName $User.FirstName `
        -Surname $User.LastName `
        -SamAccountName $User.Username `
        -UserPrincipalName "$($User.Username)@$DomainUpn" `
        -Department $User.Department `
        -Title $User.Title `
        -Path $User.OU `
        -AccountPassword $InitialPassword `
        -ChangePasswordAtLogon $true `
        -Enabled $true
}

Bu örnekte parola CSV’ye veya log dosyasına yazılmaz. Gerçek otomasyon tasarımında ilk parola kurumun onaylı secret-management veya güvenli teslim mekanizmasına göre yönetilmelidir.

OU Path Doğrulama

Kullanıcı oluşturmadan önce hedef OU’nun gerçekten var olduğunu kontrol etmek hataları azaltır:

$TargetOU = 'OU=Users,OU=HQ,DC=example,DC=local'

Get-ADOrganizationalUnit -Identity $TargetOU

Grup Üyeliklerini Ayrı Aşamada Yönetme

Departman veya rol bazlı gruplar ayrıca CSV alanı üzerinden yönetilebilir. Ancak kullanıcıyı doğrudan çok sayıda gruba eklemek yerine AGDLP/rol tabanlı erişim modeli kullanmak daha sürdürülebilirdir.

Add-ADGroupMember `
    -Identity 'GG-IT-Users' `
    -Members 'ahmet.yilmaz'

Doğrulama

Oluşturma sonrasında hesabı yeniden sorgulayın:

Get-ADUser 'ahmet.yilmaz' `
    -Properties Department, Title, Enabled, PasswordLastSet |
    Select-Object SamAccountName, UserPrincipalName, Department, Title, Enabled, PasswordLastSet

OU konumunu doğrulamak için DistinguishedName alanı da kontrol edilebilir.

Microsoft 365 / Entra ID Katmanı

On-premises AD ile Microsoft Entra ID arasında senkronizasyon kullanılan yapılarda kullanıcı oluşturulduktan hemen sonra bulut tarafında işlem yapmaya çalışmak güvenilir değildir. Sabit Start-Sleep kullanmak yerine kullanıcının gerçekten senkronize olduğunu doğrulayan kontrol mekanizması tercih edilmelidir.

Yeni otomasyonlarda eski AzureAD modülü yerine Microsoft Graph PowerShell SDK yaklaşımı tercih edilmelidir. Lisans atama, grup üyeliği ve diğer bulut işlemleri ayrı bir script/modül katmanında yürütülmelidir.

Mailbox Konusunda Önemli Ayrım

Exchange Online ortamında mailbox davranışı lisanslama ve tenant/hybrid mimarisine bağlıdır. Her kullanıcı için doğrudan Enable-Mailbox çalıştırmak genel geçer bir yöntem değildir. Hybrid Exchange, cloud-only veya synced identity senaryoları farklı komut ve işlem sırası gerektirebilir. Bu nedenle mailbox provisioning adımı ortam mimarisine göre ayrı tasarlanmalıdır.

Loglama

Operasyon sonunda yalnızca “başarılı” mesajı yazmak yerine işlem bazlı log tutulmalıdır:

$LogFile = 'C:ScriptsLogsUserOnboarding.log'

function Write-Log {
    param([string]$Message)

    "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $Message" |
        Add-Content -Path $LogFile
}

Parola, token, secret veya hassas kişisel veriler log dosyasına yazılmamalıdır.

Troubleshooting

New-ADUser: The object already exists

SamAccountName, UPN veya aynı CN ile mevcut nesne olup olmadığını kontrol edin. Scriptin tekrar çalıştırılabilir olması için oluşturma öncesi varlık kontrolü ekleyin.

The object does not exist

Genellikle CSV’deki OU path hatalıdır. Get-ADOrganizationalUnit -Identity ile hedef OU’yu doğrulayın.

Access is denied

Kullanıcı oluşturan servis hesabı veya yönetici hesabının ilgili OU üzerinde gerekli delegasyona sahip olup olmadığını kontrol edin.

Kullanıcı bulutta hemen görünmüyor

AD-to-Entra senkronizasyon modelini ve senkronizasyon durumunu kontrol edin. Sabit süre beklemek yerine kullanıcı nesnesinin bulutta oluştuğunu sorgulayarak sonraki adıma geçin.

Güvenlik ve Best Practice

  • Script içine SMTP parolası, API secret veya yönetici parolası gömmeyin.
  • İlk parolayı e-posta gövdesinde düz metin göndermeyin.
  • Least privilege ile yalnızca gerekli OU ve gruplara delegasyon verin.
  • Toplu işlem öncesi CSV verisini doğrulayın.
  • AD ve bulut otomasyonunu ayrı katmanlarda tutun.
  • Script tekrar çalıştırıldığında aynı kullanıcıyı yeniden oluşturmayan idempotent tasarım kullanın.
  • Başarı ve hata loglarını saklayın; secret veya parola loglamayın.

Sonuç

PowerShell ile AD kullanıcı onboarding otomasyonu, hesap açma süresini standartlaştırır ve manuel hataları azaltır. Sağlıklı tasarımın ana noktası tüm servisleri tek bir dev script içine sıkıştırmak değil; AD oluşturma, doğrulama, senkronizasyon ve Microsoft 365 işlemlerini kontrollü aşamalara ayırmaktır.

İlgili Rehberler

PowerShell Operasyon Merkezi

Temel cmdlet, pipeline, filtreleme ve raporlama yaklaşımı için PowerShell Komutları ana referansına; hızlı hazır komutlar için Komut Kütüphanesi bölümüne geçebilirsiniz. Tekrarlanan işlemleri script haline getirirken PowerShell Script Nedir ve Nasıl Yazılır? rehberini kullanabilirsiniz.

Otomasyon Öncesi Güvenlik Kontrolü

Örnek CSV içindeki OU değerleri temsili olmalıdır. Toplu kullanıcı oluşturmadan önce hedef OU, UPN çakışmaları, grup üyelikleri, başlangıç parolasının güvenli aktarımı ve CSV erişim izinlerini doğrulayın. Microsoft 365/Exchange mailbox oluşturma veya lisans atama adımları AD kullanıcı oluşturma işlemiyle aynı değildir; hibrit eşitleme ve bulut yetkilendirmesi ayrı doğrulanmalıdır.

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