Sistem/DevOps•8 dk okuma

İnsan Kaynakları CSV Dosyasından Active Directory Kullanıcısı, M365 Lisansı ve Departman Klasör Yetkilerini 10 Saniyede Açan Otomasyon

Yeni işe başlayan 50 personelin hesaplarını tek tek elle açıp hata yapmaya son: İnsan Kaynakları'ndan gelen Excel/CSV listesini okuyup Active Directory, M365 ve dosya sunucusu izinlerini sıfır hatayla açan PowerShell Onboarding motoru.

AE

Ahmet Ertekin

04 December 2022

İnsan Kaynakları CSV Dosyasından Active Directory Kullanıcısı, M365 Lisansı ve Departman Klasör Yetkilerini 10 Saniyede Açan Otomasyon

İnsan Kaynakları CSV Dosyasından Active Directory Kullanıcısı, M365 Lisansı ve Departman Klasör Yetkilerini 10 Saniyede Açan Otomasyon

Her ayın ilk günü İnsan Kaynakları (İK) departmanından 20 yeni personelin listesi gelir: İsimler, departmanlar, unvanlar, telefonlar. Bir sistem teknisyeni Active Directory'ye girer, tek tek kullanıcıları tıklar, kullanıcı adı formatını bazen yanlış yazar (ahmet.ertekin yerine ahmete), şifreyi yanlış verir, unvanı yazmayı unutur, sonra dosya sunucusuna gider klasör izinlerini verir, ardından M365 portalına gider lisans atar... Bu manuel amelelik en az 3 saat sürer ve hata kaçınılmazdır. Bu süreci tek bir tıklamayla 10 saniyede tamamlayan PowerShell Onboarding Motoru.

1. İK CSV Dosyası Şablonu (YeniPersonel.csv)

İK'ya doldurması için verilen katı format:

Ad,Soyad,Departman,Unvan,Telefon,Yonetici
Ahmet,Ertekin,Bilgi Islem,Kidemli Sistem Uzmani,05551234567,mehmet.demir
Elif,Kaya,Muhasebe,Mali Analist,05559876543,selin.ozkan

2. Otonom Onboarding PowerShell Betiği

Import-Module ActiveDirectory
$CSVPath = "C:\Onboarding\YeniPersonel.csv"
$Domain = "holding.com.tr"
$DefaultPassword = ConvertTo-SecureString "IlkGiris2024!" -AsPlainText -Force

$Users = Import-Csv -Path $CSVPath -Encoding UTF8

foreach ($u in $Users) {
    # Türkçe Karakterleri İngilizceye Dönüştürme (Normalize)
    $cleanAd = $u.Ad.ToLower().Replace("ç","c").Replace("ğ","g").Replace("ı","i").Replace("ö","o").Replace("ş","s").Replace("ü","u")
    $cleanSoyad = $u.Soyad.ToLower().Replace("ç","c").Replace("ğ","g").Replace("ı","i").Replace("ö","o").Replace("ş","s").Replace("ü","u")
    
    $SAMAccountName = "$cleanAd.$cleanSoyad"
    $UserPrincipalName = "$SAMAccountName@$Domain"
    $DisplayName = "$($u.Ad) $($u.Soyad)"
    
    # İlgili Departman OU'sunu Belirleme
    $OUPath = "OU=$($u.Departman),OU=Kurumsal_Kullanicilar,DC=holding,DC=local"
    
    # 1. Active Directory Hesabını Oluşturma
    New-ADUser -Name $DisplayName `
        -SamAccountName $SAMAccountName `
        -UserPrincipalName $UserPrincipalName `
        -GivenName $u.Ad `
        -Surname $u.Soyad `
        -DisplayName $DisplayName `
        -Department $u.Departman `
        -Title $u.Unvan `
        -OfficePhone $u.Telefon `
        -Path $OUPath `
        -AccountPassword $DefaultPassword `
        -Enabled $true `
        -ChangePasswordAtLogon $true
        
    Write-Host "[AD OLUŞTURULDU]: $DisplayName ($SAMAccountName)" -ForegroundColor Green
    
    # 2. Departman Güvenlik Grubuna Ekleme (Klasör İzinleri Otomatik Gelir!)
    $GroupName = "G_$($u.Departman)_Kullanicilari"
    Add-ADGroupMember -Identity $GroupName -Members $SAMAccountName
    
    # 3. Kişisel Kullanıcı Klasörünü (U: Sürücüsü) Açma ve Kota Tanımlama
    $UserFolder = "\\FS01\Kullanici_Klasorleri\$SAMAccountName"
    New-Item -ItemType Directory -Path $UserFolder -Force | Out-Null
    
    # NTFS İzinlerini Sıkılaştırma (Yalnızca o kullanıcı ve IT erişebilir!)
    $acl = Get-Acl $UserFolder
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("HOLDING\$SAMAccountName", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)
    Set-Acl $UserFolder $acl
}

3. Microsoft 365 Bulut Lisans Ataması (Grup Tabanlı Lisanslama)

Kullanıcıya tek tek M365 portalından lisans atamak yerine, Active Directory'de üye yapılan G_Muhasebe_Kullanicilari grubu Entra ID'de Group-Based Licensing kuralına bağlıdır. Kullanıcı gruba eklendiği milisaniyede Microsoft 365 Business Standard lisansı ve posta kutusu bulutta otomatik açılır!

Karşılaşılan Kritik Hatalar ve Çözüm İpuçları

  • Aynı İsim ve Soyad Çakışması (Duplicate SamAccountName): Şirkette iki tane "Ahmet Yılmaz" varsa script hata verir. Script başına bir kontrol mekanizması eklenerek eğer isim kullanımda ise sonuna rakam ekleyen (ahmet.yilmaz2) döngü kurgulanmalıdır.

Mühendis Notu

Bu scripti devreye aldıktan sonra İnsan Kaynakları ekibine tek yapmaları gerekenin Excel dosyasını doldurup paylaşılan klasöre bırakmak olduğunu söyledik. Sistem yöneticisi rutin işleri otomatize ettikçe gerçek mimari ve güvenlik projelerine odaklanacak zamanı kazanır.