Eski Modül Öldü — Hangisini Kullanmalı?

ModülDurum (2026)
MSOnlineDEPRECATED — Mart 2024'te yetkilendirme kapandı
AzureAD / AzureADPreviewDEPRECATED — Mart 2024'te kapandı
Microsoft.Graph✓ Önerilen (Azure AD/Entra için)
ExchangeOnlineManagement (V3)Exchange Online için tek doğru

1) Modülü Kurma

PowerShell 7'yi yönetici olarak açın (Win11'de pwsh). Eski 5.1 da çalışır ama 7 önerilir.

Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -Force
Update-Module -Name ExchangeOnlineManagement

2) İlk Bağlantı (MFA Destekli, Modern Auth)

Connect-ExchangeOnline -UserPrincipalName admin@firmaniz.com -ShowBanner:$false

Tarayıcı popup'ı açılır → Microsoft 365 admin hesabınız + MFA → onay. Sonra:

Get-ConnectionInformation

Bağlantı bilgilerini gösterir.

Otomasyon (Script) İçin Sertifika Tabanlı Bağlantı

Cron / scheduled task içinde MFA popup'ı çıkmasın diye Entra ID'de App Registration + sertifika oluşturun:

Connect-ExchangeOnline `
  -AppId "00000000-0000-0000-0000-000000000000" `
  -CertificateThumbprint "ABC123..." `
  -Organization "firmaniz.onmicrosoft.com"

3) Bağlantıyı Kapatma

Disconnect-ExchangeOnline -Confirm:$false

Önemli — açık bağlantılar 1 saat sonra otomatik kapanır ama elle yapmak iyi pratik.

10 En Çok Kullanılan Komut

1. Tüm posta kutularını listele

Get-EXOMailbox -ResultSize Unlimited |
  Select DisplayName, UserPrincipalName, RecipientTypeDetails |
  Export-Csv .\mailboxes.csv -NoTypeInformation -Encoding UTF8

EXO ön ekli komutlar yeni REST API tabanlı — eskiye göre 10x hızlı.

2. Posta kutusu boyutu raporu

Get-EXOMailbox -ResultSize Unlimited |
  Get-EXOMailboxStatistics |
  Select DisplayName, ItemCount,
    @{n="SizeMB";e={[math]::Round(($_.TotalItemSize.Value.ToBytes()/1MB),0)}} |
  Sort SizeMB -Descending |
  Export-Csv .\size_report.csv -NoTypeInformation

3. Belirli kullanıcıya tam erişim ver (Full Access)

Add-MailboxPermission -Identity info@firmaniz.com `
  -User ahmet@firmaniz.com -AccessRights FullAccess -InheritanceType All

Add-RecipientPermission -Identity info@firmaniz.com `
  -Trustee ahmet@firmaniz.com -AccessRights SendAs -Confirm:$false

4. Otomatik yanıt (out of office) toplu kur

Set-MailboxAutoReplyConfiguration -Identity ayse@firmaniz.com `
  -AutoReplyState Scheduled `
  -StartTime "2026-07-15 09:00" -EndTime "2026-07-29 09:00" `
  -InternalMessage "Yıllık iznimdeyim, Mehmet'e yönlendirin." `
  -ExternalMessage "I am on vacation, please contact mehmet@firmaniz.com"

5. Ortak posta kutusu (Shared Mailbox) oluştur

New-Mailbox -Shared -Name "Bilgi" -DisplayName "Bilgi Hattı" `
  -PrimarySmtpAddress info@firmaniz.com

6. Dağıtım listesine üye ekle

Add-DistributionGroupMember -Identity tumcalisanlar@firmaniz.com `
  -Member yenicalisan@firmaniz.com

7. Mail forward (yönlendirme) — silinmiş çalışan için

Set-Mailbox -Identity eski@firmaniz.com `
  -ForwardingSmtpAddress yeni@firmaniz.com -DeliverToMailboxAndForward $true

8. Litigation Hold etkinleştir (KVKK / dava saklama)

Set-Mailbox -Identity ahmet@firmaniz.com `
  -LitigationHoldEnabled $true `
  -LitigationHoldDuration 2555  # 7 yıl, gün cinsinden

9. Belirli kullanıcının son 30 gündeki gönderilerini ara

Search-Mailbox -Identity ahmet@firmaniz.com `
  -SearchQuery 'Subject:"fatura" AND Sent:>=01/01/2026' `
  -TargetMailbox audit@firmaniz.com `
  -TargetFolder "Audit-Ahmet" -LogLevel Full

Search-Mailbox 2025'te deprecated — yenisi: Compliance Search (New-ComplianceSearch).

10. Mesaj izleme (mail nereye gitti?)

Get-MessageTrace -SenderAddress ahmet@firmaniz.com `
  -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date) |
  Select Received, SenderAddress, RecipientAddress, Subject, Status

10 günden eski için Get-HistoricalSearch kullanılır.

Hata Çözümü: "AADSTS50034" / "Connect-ExchangeOnline failed"

  • UPN'yi tam yazın: admin@firmaniz.com — sadece admin yazma
  • Tenant'ta Exchange Online lisanslı admin kullanıcısı olmalı (Global Admin tek başına yetmez)
  • Conditional Access engeli: trusted location veya MFA exception kontrol
  • Eski TLS: [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

SSS

PowerShell ISE çalışıyor mu?

Modül teknik olarak kurulur, ama V3 REST komutları (EXO ön ekli) bazen ISE'de hata verir. VSCode + PowerShell extension önerilir.

Saatlik bağlantı limiti var mı?

Evet — saatte 3 paralel oturum, 24 saatte 5000 cmdlet çağrısı. Kurumsal otomasyon için throttling ile bekleme şart.

Get-Mailbox vs Get-EXOMailbox farkı?

Get-EXOMailbox V3 REST API tabanlı, 10x hızlı, -Properties ile kontrolü daha iyi. Yeni script'lerde her zaman EXO komutlarını kullanın.

MFA olmadan bağlanabilir miyim?

Hayır — Microsoft Mart 2024'ten beri "Security Defaults" ile basic auth tüm tenant'larda kapalı. App + sertifika tek alternatif.

Dağıtım grupları için Microsoft Graph mi, Exchange PowerShell mi?

Microsoft 365 Group → Graph. Distribution List (DL) → Exchange Online PowerShell. Klasik DL'leri Graph yönetemez.

Exchange Online yönetimi için danışmanlık → Script kütüphanesi + uzaktan destek paketleri.

İlgili rehber: Rol bazlı adresler için (destek@, info@) Paylaşılan Posta Kutusu (Shared Mailbox) Kurulum Rehberi'ne göz atın. Lisansız 50 GB, Full Access vs Send As farkı, PowerShell ile toplu izin yönetimi, çıkan çalışan dönüşümü detaylı.

Sorunu Çözmek İçin Zaman Harcamak İstemiyor musun?

SLA'lı Hizmet

Bu rehberdeki adımlar her zaman işe yaramayabilir; bazen Microsoft 365 tenant'ında yönetici müdahalesi veya bir uzmanın bağlanması gerekir. KOBİ Başlangıç paketimiz (5-25 kullanıcı) ortalama 4 saatte ticket yanıtı, Standart ise sınırsız ticket + telefon desteği sunar. Aylık abonelik, tek seferlik fatura tuzağı yok.

Başlangıç · 5-25 kullanıcı Standart · 25-100 · En Popüler Premium · 100+ · 7/24 + TAM