Microsoft 365 ortamlarını yöneten sistem yöneticileri için PowerShell, en güçlü otomasyon araçlarından biridir. Exchange Online üzerinde e-posta kutusu yönetiminden cloud sunucularımızın güvenlik yapılandırmalarına kadar birçok işlemi komut satırından hızla gerçekleştirmek mümkündür. Bu rehberde, PowerShell ile Exchange Online bağlantısı kurmayı ve sık kullanılan 10 yönetim komutunu detaylı şekilde ele alıyoruz.
Exchange Online Servisinin Tanımı
Exchange Online, Microsoft 365 ekosisteminde yer alan bulut tabanlı e-posta, takvim ve kişi yönetimi platformudur. PowerShell entegrasyonu sayesinde yöneticiler, bu servisin bileşenlerini doğrudan komut satırından yönetebilir. Böylece oturum açmayan kullanıcılar, yönlendirilmiş posta kutuları ve kota limitleri üzerinde tam denetim sağlanır.
Exchange Online Yönetiminde PowerShell
Arayüz üzerinden yapılan işlemler çoğu zaman zaman alıcı ve manuel hatalara açıktır. PowerShell, Exchange Online üzerinde bu görevleri toplu, hızlı ve güvenli şekilde yürütmeyi mümkün kılar. Üstelik Windows Wail2ban benzeri güvenlik çözümleriyle birlikte kullanıldığında, yalnızca otomasyon değil, aynı zamanda güçlü bir erişim güvenliği de elde edilir.
PowerShell Kullanarak Exchange Online Yönetimi
Toplu İşlem
Görsel yönetim panelleri tek bir kullanıcı veya küçük gruplar için yeterli olabilir. Ancak yüzlerce posta kutusu üzerinde aynı değişikliği yapmanız gerektiğinde bu yöntem kaynak açısından verimsizdir. PowerShell komutlarıyla bu işlemleri dakikalar içinde tamamlayabilirsiniz.
Filtreleme
PowerShell, GUI’de mümkün olmayan veri filtreleme durumlarını destekler.
Arşiv durumu etkin olmayan posta kutularını ya da son 90 gündür giriş yapılmamış kullanıcıları birkaç satırlık komutla bulabilirsiniz
Pipeline Kullanımı
PowerShell’in en güçlü özelliklerinden biri, bir komutun çıktısını başka bir komuta aktarma (pipeline) yeteneğidir.
Bu sayede belirli kullanıcıları seçip farklı cmdlet’lerle zincirleme işlemler yapabilirsiniz.

PowerShell ile Exchange Online’a Hazırlık
Exchange Online üzerinde komut tabanlı yönetim yapabilmek için sistemin gerekli modüllerle donatılması gerekir. Microsoft 365 platformunda her servis için ayrı PowerShell modülü bulunduğundan, işlem öncesinde uygun modülün kurulması şarttır.
AzureAD Modülünü Yükleme
Kullanıcı hesaplarını ve kimlikleri yönetir. ——-> Install-Module AzureAD
Exchange Online Management Modülünü Yükleme
Posta kutuları ve posta akışı gibi Exchange bileşenlerini yönetir. —–> Install-Module ExchangeOnlineManagement
Exchange Online PowerShell Bağlantı İzni Düzenleme
Microsoft 365 kullanıcılarının çoğu, PowerShell üzerinden Exchange Online servisine erişebilir. Fakat güvenlik politikaları gereği bu yetkiyi kapatmak veya yalnızca belirli hesaplarla sınırlamak isteyebilirsiniz. Bu işlemleri yapmak için aşağıda verilen komutlar kullanılmalıdır.
- PowerShell erişimini etkinleştirme
Set-User -Identity [email protected] -RemotePowerShellEnabled $true
- PowerShell erişimini devre dışı bırakma
Set-User -Identity [email protected] -RemotePowerShellEnabled $false
Modern Auth ile Exchange Online’a Bağlantı
Exchange Online PowerShell V2 modülünü yükledikten sonra bağlantı şu şekilde yapabiliriz.
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -UserPrincipalName [email protected] -ShowProgress $true
Bu komut çalıştırıldığında Microsoft 365 oturum açma penceresi açılır ve MFA aktifse doğrulama adımları istenir.
Bağlantı kurulduktan sonra Get-ExoMailbox gibi tüm cmdlet’leri kullanabilirsiniz.

Exchange Online PowerShell ile En Sık Yapılan 10 Görev
Bağlantı kurulduktan sonra yöneticilerin en sık başvurduğu komutlar, rutin işlemleri hızla tamamlamayı ve yönetimi kolaylaştırmayı sağlar.
Mailbox Bilgilerini Listeleme
🟠 Get-ExoMailbox -ResultSize Unlimited | Select DisplayName, PrimarySmtpAddress
Bu komut, kuruluşunuzdaki tüm posta kutularını ve SMTP adreslerini listeler. Geniş kullanıcı yapısına sahip ortamlarda genel görünüm almak için idealdir.

Mailbox İstatistiklerini Görüntüleme
🟠 Get-ExoMailboxStatistics -Identity [email protected]
Belirli bir posta kutusunun boyutunu, öğe sayısını ve son oturum açma zamanını gösterir. Kullanıcı etkinliğini ve depolama kullanımını analiz etmek için kullanılır.
Silinmiş Öğelerin Saklama Süresini Artırma
🟠 Set-Mailbox -Identity "User" -RetainDeletedItemsFor 30
Bu komut, silinen öğelerin kaç gün boyunca kurtarılabilir durumda kalacağını belirler.
Denetim Günlüğünü Etkinleştirme
🟠 Set-Mailbox -Identity "User" -AuditEnabled $true
Mail kutusu üzerinde yapılan işlemleri kaydederek kullanıcı aktivitelerini izlemeyi sağlar.
Etkin Olmayan Kullanıcıları Belirleme
🟠 Get-ExoMailbox | ForEach { Get-ExoMailboxStatistics -Identity $_.UserPrincipalName | Select DisplayName, LastLogonTime }
Uzun süredir oturum açmamış kullanıcıları tespit eder. Bu sayede gereksiz lisans kullanımını azaltabilirsiniz

Yönlendirme Tanımlı Posta Kutularını Bulma
🟠 Get-Mailbox | Where { $_.ForwardingAddress -ne $null } | Select DisplayName, ForwardingAddress
Bu komut, başka adreslere yönlendirme yapılmış posta kutularını listeler. Yetkisiz yönlendirmeleri tespit etmek için kullanışlıdır.
Otomatik Yanıt Yapılandırması
🟠 Set-MailboxAutoReplyConfiguration -Identity [email protected] -AutoReplyState Enabled -InternalMessage "Ofis dışındayım."
Kullanıcıların ofis dışında olduklarında otomatik yanıt göndermesini sağlar.
Yönetim Rolleri Atama
🟠 Add-RoleGroupMember "Organization Management" -Member [email protected]
Belirli bir kullanıcıya yönetim yetkisi verir. Rol tabanlı erişim kontrolüyle güvenli bir yönetim modeli oluşturur.
Migration Durumlarını Görüntüleme
🟠 Get-MigrationUser -BatchId MigrationBatch | Get-MigrationUserStatistics
Taşıma sürecindeki kullanıcıların durumunu ve ilerleme oranlarını gösterir. Geçiş operasyonlarını izlemek ve sorunları erken tespit etmek için kullanılır.
ActiveSync Cihazlarını Listeleme
🟠 Get-MobileDevice -Mailbox [email protected]
Belirli bir kullanıcı hesabına bağlı tüm mobil cihazları görüntüler. Güvenlik politikaları kapsamında cihaz erişimini denetlemek için yararlıdır.

Sık Sorulan Sorular
Exchange Online PowerShell’de performansı nasıl arttırılır?
-ResultSize komutunu sınırlı tutup gereksiz çıktıları CSV’ye yönlendirmek yerine Select-Object ile daraltmak performansı ciddi oranda artırır.
Komut çıktıları nasıl arşivlenmeli veya loglanmalıdır?
Start-Transcript komutu oturum boyunca yapılan her işlemi kaydeder.
Ayrıca Out-File veya Export-CSV ile merkezi log klasörüne yönlendirmek güvenlik ve denetim açısından önerilir.
PowerShell ile Exchange Online arasında oturum süresi ne kadardır?
Varsayılan oturum süresi 1 saat civarındadır. Uzun süreli yönetim senaryolarında oturum süresi dolmadan önce Connect-ExchangeOnline komutunu yeniden çalıştırabilirsiniz.
PowerShell oturumlarını uzaktan yönetirken hangi güvenlik ayarlarına dikkat edilmelidir?
Exchange Online yönetimi sırasında uzak bağlantılar için güvenli port ve protokol yapılandırması yapılmalıdır. Özellikle yönetici bağlantıları için RDP üzerinde kullanılan portun değiştirilmesi, saldırı yüzeyini küçültür. Bu konuda adım adım rehber için Windows Server 2016 Uzak Masaüstü Portu Değiştirme yazısına göz atabilirsiniz.
Exchange Online PowerShell komutları ile e-posta gönderim limitleri ayarlanabilir mi?
Kullanıcı başına gönderim sınırlarını Set-Mailbox komutu ile değiştirebilirsiniz.
Örneğin, bir kullanıcının günlük gönderim limitini sınırlamak için
Set-Mailbox -Identity [email protected] -RecipientLimits 500