Exchange'de PowerShell Kullanarak Tüm SMTP (E-posta) Adreslerini Alın
Zaman zaman Exchange kuruluşunuzdaki e-posta adreslerinin tam listesini dışarı aktarmanız gerekebilir. Bu makalede, PowerShell kullanarak Exchange Server veya Microsoft 365'te (Exchange Online) atanan tüm SMTP adreslerinin nasıl alınacağını ve bir CSV dosyasına nasıl aktarılacağını göstereceğiz.
Exchange kuruluşunuza bağlanın:
Şirket içi Exchange Server'ı yönetmek için Exchange Yönetim Kabuğu (EMS) modülünü kullanabilir veya normal bir PowerShell konsolundan Exchange'e uzaktan bağlanabilirsiniz;
Microsoft 365 kiracısına bağlanmak için Exchange Online PowerShell modülünü (EXO) kullanın.
PowerShell içinden Exchange Online'da oturum açmak için sertifika tabanlı kimlik doğrulamayı kullanabilirsiniz.
Belirli bir Exchange posta kutusunun tüm birincil ve ek SMTP adreslerini görüntülemek için şu komutu çalıştırın:
Get-Mailbox testmax |Select-Object DisplayName,PrimarySmtpAddress,EmailAddresses|flBu
SMTPbüyük harfle yazılan adres birincil e-posta adresini içerir
Küçük harf
smtpdeğerler ikincil (takma ad) e-posta adresleridir.
proxyAddresses özelliği, şirket içi Active Directory'deki e-posta teslimat adresini ayarlamak için kullanılır.
Gördüğünüz gibi, bir kullanıcıya EmailAddresses dize özelliğinde saklanan birkaç ek SMTP adresi atanır. Bu öznitelikte başka türde adresler de olabilir; dolayısıyla bir posta kutusunun tüm SMTP adreslerinin listesini almak için aşağıdaki komutu çalıştırın:
Get-Mailbox testmax | Select-Object DisplayName,PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }}Aşağıdaki komut, Exchange'deki tüm kullanıcı posta kutuları ve paylaşılan posta kutuları için tüm birincil adresleri ve takma adları görüntüler ve sonuçları bir CSV dosyasına aktarır:
Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName,PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }} | Export-Csv "C:\PS\List-All-SMTP-Addresses.csv" -NoTypeInformation -Encoding UTF8Get-Mailbox cmdlet'i yalnızca kullanıcılar ve paylaşılan posta kutuları hakkındaki bilgileri görüntüler.
Active Directory'de (veya Azure AD), SMTP adresleri atanmış (posta özellikli nesneler) başka türde nesneler olabilir: dağıtım grupları, kişiler ve Microsoft 365 grupları (Entra ID'deki Birleşik Gruplar). Bir Exchange kuruluşundaki/kiracısındaki tüm nesnelerin SMTP adreslerini listelemek için Get-Recipient cmdlet'ini kullanın:
Get-Recipient -ResultSize Unlimited | Select-Object DisplayName, RecipientType, PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }}Bu durumda, tüm Exchange nesnelerinin SMTP adreslerinin bir listesine sahibiz. Yalnızca belirli bir nesne türünün SMTP adreslerini dışarı aktarmak için ilk cmdlet'e aşağıdaki parametreyi ekleyin
Get-Recipient -ResultSize Unlimited -RecipientType your_object_type | …Olası Exchange nesnesi türleri:
Dinamik Dağıtım Grubu
Postaİletişim
MailNonUniversalGroup
MailUniversalDağıtımGrubu
MailUniversalSecurityGroup
Posta Kullanıcısı
-
Genel Klasör
Kullanıcı Posta Kutusu
Aynı (yinelenen) alıcı SMTP adresine sahip Exchange nesnelerini bulmanız gerekiyorsa şunu çalıştırın:
Get-Recipient -resultsize unlimited | where {$_.EmailAddresses -like "*[email *"}Ayrıca Exchange'de SMTP adreslerinin düz bir listesini de alabilirsiniz:
Get-Recipient | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object { $_.Replace("smtp:", "").Replace("SMTP:", "") }Microsoft Teams kanalı için de benzersiz SMTP adresleri oluşturuldu.
Exchange kuruluşunuzdaki benzersiz SMTP adreslerinin sayısını görüntüleyin:
Get-Recipient -ResultSize Unlimited | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" }| measure-object

