Erhalten Sie alle SMTP-(E-Mail-)Adressen mit PowerShell in Exchange

Von Zeit zu Zeit müssen Sie möglicherweise die vollständige Liste der E-Mail-Adressen in Ihrer Exchange-Organisation exportieren. In diesem Artikel zeigen wir, wie Sie mithilfe von PowerShell alle zugewiesenen SMTP-Adressen abrufen und in eine CSV-Datei in Exchange Server oder Microsoft 365 (Exchange Online) exportieren.

Stellen Sie eine Verbindung zu Ihrer Exchange-Organisation her:

  • Sie können das Exchange Management Shell (EMS)-Modul verwenden, um Exchange Server vor Ort zu verwalten, oder Sie können über eine normale PowerShell-Konsole eine Remote-Verbindung zu Exchange herstellen.
  • Verwenden Sie das Exchange Online PowerShell-Modul (EXO), um eine Verbindung zum Microsoft 365-Mandanten herzustellen. Sie können die zertifikatbasierte Authentifizierung verwenden, um sich über PowerShell bei Exchange Online anzumelden.

Führen Sie diesen Befehl aus, um alle primären und zusätzlichen SMTP-Adressen für ein bestimmtes Exchange-Postfach anzuzeigen:

Get-Mailbox testmax |Select-Object DisplayName,PrimarySmtpAddress,EmailAddresses|fl

  • DerSMTPDie Adresse in Großbuchstaben enthält die primäre E-Mail-Adresse
  • Der KleinbuchstabesmtpWerte sind die sekundären (Alias-)E-Mail-Adressen.

Das Attribut „proxyAddresses“ wird verwendet, um die E-Mail-Zustellungsadresse im lokalen Active Directory festzulegen.

Wie Sie sehen, werden einem Benutzer mehrere zusätzliche SMTP-Adressen zugewiesen, die im String-Attribut EmailAddresses gespeichert werden. Dieses Attribut kann andere Arten von Adressen enthalten. Um eine Liste aller SMTP-Adressen eines Postfachs zu erhalten, führen Sie den folgenden Befehl aus:

Empfohlene Lektüre:Entfernen Sie Remote-IP-Adressen aus dem Exchange-Empfangsconnector

Get-Mailbox testmax | Select-Object DisplayName,PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }}

Der folgende Befehl zeigt alle primären Adressen und Aliase für alle Benutzerpostfächer und freigegebenen Postfächer in Exchange an und exportiert die Ergebnisse in eine CSV-Datei:

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName,PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }} | Export-Csv "C:PSList-All-SMTP-Addresses.csv" -NoTypeInformation -Encoding UTF8

DerGet-MailboxDas Cmdlet zeigt nur Informationen zu Benutzern und freigegebenen Postfächern an.

In Active Directory (oder Azure AD) gibt es möglicherweise andere Objekttypen mit zugewiesenen SMTP-Adressen (E-Mail-aktivierte Objekte): Verteilergruppen, Kontakte und Microsoft 365-Gruppen (einheitliche Gruppen in Entra ID). Benutzen Sie dieGet-EmpfängerCmdlet zum Auflisten der SMTP-Adressen aller Objekte in einer Exchange-Organisation/einem Exchange-Mandanten:

Get-Recipient -ResultSize Unlimited | Select-Object DisplayName, RecipientType, PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }}

In diesem Fall haben wir eine Liste der SMTP-Adressen aller Arten von Exchange-Objekten. Um nur SMTP-Adressen eines bestimmten Objekttyps zu exportieren, fügen Sie dem ersten Cmdlet den folgenden Parameter hinzu

Get-Recipient -ResultSize Unlimited -RecipientType your_object_type | …

Mögliche Typen von Exchange-Objekten:

  • DynamicDistributionGroup
  • MailKontakt
  • MailNonUniversalGroup
  • MailUniversalDistributionGroup
  • MailUniversalSecurityGroup
  • MailUser
  • Öffentlicher Ordner
  • BenutzerMailbox

Wenn Sie Exchange-Objekte mit derselben (doppelten) Empfänger-SMTP-Adresse finden müssen, führen Sie Folgendes aus:

Get-Recipient -resultsize unlimited | where {$_.EmailAddresses -like "*[email protected]*"}

Sie können in Exchange auch eine flache Liste von SMTP-Adressen abrufen:

Get-Recipient | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object { $_.Replace("smtp:", "").Replace("SMTP:", "") }

Auch für den Microsoft Teams-Kanal wurden eindeutige SMTP-Adressen generiert.

Sehen Sie sich die Anzahl der eindeutigen SMTP-Adressen in Ihrer Exchange-Organisation an:

Get-Recipient -ResultSize Unlimited | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" }| measure-object

Related Posts