当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在 Exchange 中使用 PowerShell 获取所有 SMTP(电子邮件)地址

作者:精品下载站 日期:2024-12-14 06:36:27 浏览:13 分类:玩电脑

在 Exchange 中使用 PowerShell 获取所有 SMTP(电子邮件)地址


有时,您可能需要导出 Exchange 组织中的电子邮件地址的完整列表。在本文中,我们将展示如何使用 PowerShell 获取所有分配的 SMTP 地址并将其导出到 Exchange Server 或 Microsoft 365 (Exchange Online) 中的 CSV 文件。

连接到您的 Exchange 组织:

  • 您可以使用 Exchange Management Shell (EMS) 模块来管理本地 Exchange Server,也可以从常规 PowerShell 控制台远程连接到 Exchange;

  • 使用 Exchange Online PowerShell 模块 (EXO) 连接 Microsoft 365 租户。

    您可以使用基于证书的身份验证从 PowerShell 中登录 Exchange Online。

要查看特定 Exchange 邮箱的所有主 SMTP 地址和附加 SMTP 地址,请运行以下命令:

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

[玩转系统] 在 Exchange 中使用 PowerShell 获取所有 SMTP(电子邮件)地址

  • SMTP

    大写的地址包含主要电子邮件地址

  • 小写

    smtp

    值是辅助(别名)电子邮件地址。

proxyAddresses 属性用于设置本地 Active Directory 中的电子邮件传送地址。

如您所见,为用户分配了多个附加 SMTP 地址,这些地址存储在 EmailAddresses 字符串属性中。此属性中可能还有其他类型的地址,因此要获取邮箱的所有 SMTP 地址的列表,请运行以下命令:

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

以下命令显示 Exchange 中所有用户邮箱和共享邮箱的所有主地址和别名,并将结果导出到 CSV 文件:

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 UTF8

Get-Mailbox cmdlet 仅显示有关用户和共享邮箱的信息。

在 Active Directory(或 Azure AD)中,可能存在分配了 SMTP 地址的其他类型的对象(启用邮件的对象):通讯组、联系人和 Microsoft 365 组(Entra ID 中的统一组)。使用 Get-Recipient cmdlet 列出 Exchange 组织/租户中所有对象的 SMTP 地址:

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

[玩转系统] 在 Exchange 中使用 PowerShell 获取所有 SMTP(电子邮件)地址

在本例中,我们有所有类型的 Exchange 对象的 SMTP 地址的列表。要仅导出特定对象类型的 SMTP 地址,请将以下参数添加到第一个 cmdlet

Get-Recipient -ResultSize Unlimited -RecipientType your_object_type | …

Exchange 对象的可能类型:

  • 动态分发组

  • 邮件联系

  • 邮件非通用集团

  • 邮件环球分发集团

  • 邮件通用安全集团

  • 邮件用户

  • 公共文件夹

  • 用户邮箱

如果您需要查找具有相同(重复)收件人 SMTP 地址的 Exchange 对象,请运行:

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

您还可以获取 Exchange 中 SMTP 地址的简单列表:

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

[玩转系统] 在 Exchange 中使用 PowerShell 获取所有 SMTP(电子邮件)地址

还为 Microsoft Teams 渠道生成了唯一的 SMTP 地址。

查看 Exchange 组织中唯一 SMTP 地址的数量:

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

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯