Get-Mailbox Cmdlet 是什么?
Get-Mailbox cmdlet 是 Exchange 管理 Shell(用于 Exchange Server)以及 Exchange Online PowerShell 模块(用于 Office 365)中的关键命令。它用于检索 Exchange 环境中有关邮箱的信息。无论您处理的是用户邮箱、关联邮箱、共享邮箱还是资源邮箱,管理员都可以使用 Get-Mailbox 在指定范围内(例如数据库、服务器或组织单位)列出所有邮箱,或检索单个邮箱的详细属性。您还可以筛选结果,仅返回满足特定条件的邮箱。
PowerShell 的 Get-Mailbox cmdlet 支持许多参数,可用于自定义返回的信息。例如,-Properties 等参数可提供对邮箱属性的全面细节。Get-Mailbox 的输出可以轻松导出为 CSV 或 JSON 格式,从而便于与其他工具和平台进行集成。Get-Mailbox cmdlet 还提供了在 Exchange 环境中使用 PowerShell 脚本的灵活性。
同时适用于本地部署(on-premises)Exchange 与基于云的服务
Get-Mailbox PowerShell cmdlet 可用于本地部署(on-premises)的 Exchange Server 环境以及 Exchange Online(Office 365)。不过,其实现方式和可用功能存在差异。该 cmdlet 于 Exchange Server 2007 中作为 Exchange Management Shell 的一部分推出。
精选相关内容:
本地部署(On-Premises)Exchange Server
Get-Mailbox 可在 Exchange Server 2010、2013、2016 和 2019 中使用。 在本地部署的 Exchange 中,Get-Mailbox 通过 Exchange Management Shell (EMS) 使用;也可以在 PowerShell 中加载 Exchange 模块后使用。 它包含用于按数据库、组织单位、收件人类型等进行筛选的参数。 输出各种邮箱属性,例如名称、电子邮件地址以及邮箱数据库。
Exchange Online(Office 365)
通过 PowerShell 使用 Get-Mailbox 可用于 Exchange Online。Exchange Online 通过远程 PowerShell 连接进行访问。该模块提供基于云的管理能力,并通过远程方式访问。与本地部署的 Exchange 类似,但可能包含针对云环境优化的其他参数或功能。输出包含与云端管理相关的属性。
在 Exchange Online 中使用 Get-EXOMailbox cmdlet 的建议
Get-EXOMailbox cmdlet 属于 Exchange Online PowerShell 模块的一部分,用于检索 Exchange Online 中(Office 365 的一部分)的邮箱信息。该 cmdlet 是对 Get-Mailbox 的替代方案,并针对 Exchange Online 做了增强。Get-EXOMailbox 针对云环境进行了优化,可能提供更好的性能以及为 Office 365 设计的其他功能。该 cmdlet 提供更高级的筛选和查询选项,这些选项在基于云的部署中尤其有用,并且与其他 Office 365 服务和功能的集成度更高。
使用 Get-EXOMailbox 的建议
- 在 Exchange Online 中工作时,为了获得优化的性能和专为云设计的功能,请使用 Get-EXOMailbox 而不是 Get-Mailbox。
- 使用 -Filter 参数可根据特定条件高效检索部分邮箱,从而降低负载并提升查询性能。
- 对于大型组织,请使用 -ResultSize Unlimited 以确保获取所有相关邮箱。请留意在数据集非常庞大时可能带来的性能影响。
- 在 Exchange Online 中使用 PowerShell 脚本调用 Get-EXOMailbox,实现自动化的报表生成、管理和维护任务。
Get-Mailbox Cmdlet 的功能
在 Exchange Server 和 Exchange Online 中,Get-Mailbox cmdlet 用于检索有关邮箱的详细信息。该 cmdlet 不会修改任何数据,其主要功能是收集并显示邮箱属性和配置,包括邮箱大小、配额、项目数量、最后访问时间等更多信息。根据所使用的参数不同,cmdlet 能够灵活地定位特定邮箱、一组邮箱或所有邮箱。
目的
Get-Mailbox cmdlet 会检索有关邮箱的信息,包括用户邮箱、共享邮箱、资源邮箱(如会议室、共享和设备邮箱)以及其他类型。它提供诸如邮箱属性、位置和配置等详细信息。
主要用途
为报告目的生成邮箱列表,例如审核邮箱类型、位置和属性。检索完成邮箱管理任务所需的详细信息,例如配置邮箱设置或执行批量操作。通过提供与配置、配额等相关的特定邮箱信息,帮助诊断问题。
操作
当您执行 Get-Mailbox cmdlet 时,它会查询 Exchange 目录服务,Active Directory 用于在本地环境中检索邮箱信息,或查询 Office 365 中的 Exchange Online 目录。该 cmdlet 会从邮箱数据库或目录中获取数据,并根据指定的参数进行展示。内容包括诸如电子邮件地址、邮箱大小等属性。
输出
默认情况下,Get-Mailbox 会显示一组常见属性,例如 DisplayName、PrimarySmtpAddress、Database 和 Recipient Type。您可以使用 Select-Object 对输出进行自定义,以显示其他或特定属性。
参数
诸如 -Identity、-Database、-OrganizationalUnit 和 -Filter 之类的参数,允许你根据数据库位置、组织单位或自定义属性等条件,将搜索范围缩小到特定邮箱或邮箱集合。-ResultSize 可让你控制返回的结果数量,这有助于管理性能并聚焦于相关数据子集。Get-Mailbox 还支持许多其他参数以完成更多任务。
运行 Get-Mailbox Cmdlet 所需的权限
在 Exchange Server 和 Exchange Online 中运行 Get-Mailbox cmdlet 需要特定权限。这些权限决定了谁可以执行该 cmdlet 来检索邮箱信息。这些权限通常通过 Exchange 中的基于角色的访问控制(RBAC)进行分配。这些角色通常包括“Recipient Management(收件人管理)”“Organization Management(组织管理)”或“View-Only Organization Management(只读组织管理)”。下面是运行 Get-Mailbox cmdlet 所需权限的详细概览。
Exchange Server(本地部署)
在本地部署的 Exchange Server 环境中,通常通过 role-based access control(RBAC)授予权限。RBAC 角色可以在多个作用域中分配,从整个组织到特定邮箱数据库。
收件人管理角色
用于常规邮箱管理(包括运行 Get-Mailbox)时,用户通常会添加到“Recipient Management(收件人管理)”角色组。该角色组包含允许创建、管理和删除邮箱等(以及其他与收件人相关的任务)的角色。
组织管理角色
对于高等级的管理权限(包括能够运行所有与邮箱相关的 cmdlet),可以使用“Organization Management”角色组。该角色组可在整个 Exchange 组织范围内授予权限。
仅查看的组织管理角色
该角色为组织设置提供只读访问权限,包括能够运行 Get-Mailbox,但不具备修改设置的能力。
自定义 RBAC 角色
你还可以创建专门包含 Get-Mailbox cmdlet 的自定义角色,根据特定需求自定义权限,而不会授予超出必要范围的更广泛访问权限。
Exchange Online(Office 365)
在用于 Get-Mailbox 的 Exchange Online 中,权限同样通过 RBAC 进行管理。它属于整体 Office 365 权限结构的一部分。前面提到的所有用于本地部署 Exchange 服务器的角色也同样可用,但下面还提到了一些更高级别的角色,这些角色也具备运行 Get-Mailbox cmdlet 的权限。
全局管理员
具有“全局管理员”角色的用户具有在整个 Exchange Online 组织中与其他管理 cmdlet 一起运行 Get-Mailbox 的权限。
Exchange 管理员角色
针对 Exchange Online,“Exchange 管理员”角色提供管理 Exchange 设置和对象的必要权限,包括执行 Get-Mailbox。
自定义管理员角色
Office 365 允许创建自定义管理员角色,就像本地部署(on-premises)的 Exchange 一样。自定义角色可以专门包含 Get-Mailbox cmdlet,并且还可以包含其他所需的 cmdlet,从而实现对权限的精确控制。
Get-Mailbox cmdlet 的语法
基础语法
使用 Get-Mailbox cmdlet 的最直接方式是使用 PowerShell 获取所有邮箱。cmdlet 在不带任何参数时会返回所有邮箱的摘要列表,其中包含诸如 DisplayName、Alias、ServerName、ProhibitSendQuota 等主要属性,以及根据环境可能会包含的其他属性。
Get-Mailbox
通用语法
带有多个参数的 Get-Mailbox 的通用结构如下。
Get-Mailbox [-Identity <MailboxIdParameter>] [-Database <DatabaseIdParameter>] [-OrganizationalUnit <OrganizationalUnitIdParameter>] [-RecipientTypeDetails <RecipientTypeDetails>] [-Filter <FilterExpression>] [-ResultSize <Unlimited | Integer>] [-DomainController <Fqdn>] [-ReadFromDomainController] [-Anr <String>] [-IncludeSoftDeletedMailboxes] [-MessageTrackingLogPath <String>] [-ResultSize <Unlimited | Integer>]
下面是包含一个参数的通用语法
Get-Mailbox [-Parameter <value>]
常用的 Get-Mailbox 参数
以下是常用的 Get-Mailbox 参数:
Get-Mialbox Parameters | Syntax |
|---|---|
|
-Identity Parameter |
Get-Mailbox -Identity “BarbaraCole” |
|
-Filter Parameter |
Get-Mailbox -Filter {Name -like “Bar*”} |
|
-Database Parameter |
Get-Mailbox -Database “ Mailbox Database 1767124038″ |
|
-OrganizationalUnit Parameter |
Get-Mailbox -OrganizationalUnit “OU=Versacorp,DC=MILKYWAY,DC=LOCAL” |
|
-Arbitration Parameter |
Get-Mailbox -Arbitration |
|
-AuditLog Paramter |
Get-Mailbox -AuditLog |
|
-RecipientTypeDetails Parameter |
Get-Mailbox -RecipientTypeDetails SharedMailbox |
|
-ResultSize Parameter |
Get-Mailbox -ResultSize 10 |
|
-SoftDeletedMailbox Parameter |
Get-Mailbox -SoftDeletedMailbox |
|
-Anr |
Get-Mailbox -Anr “Adita” |
|
-SortBy |
Get-Mailbox -SortBy Name |
让我们逐一看看它们
-Identity 参数
-Identity 参数用于指定要检索的邮箱。它可以接受多种形式的标识符,例如邮箱 GUID、专有名称(Distinguished Name,DN)、Domain\Username、用户主体名称(User Principal Name,UPN)、旧版 Exchange DN、SMTP 地址或别名(Alias)。该参数可用于快速访问特定邮箱的信息。
Get-Mailbox -Identity "BarbaraCole"
-Filter 参数
“-Filter” 参数允许执行更复杂的查询。它用于定义条件,以根据诸如部门、自定义属性或邮箱大小等属性来精确定位你感兴趣的那一组邮箱。
Get-Mailbox -Filter {Name -like "Bar*"}
Get-Mailbox -Filter {DisplayName -like "Bar*"}
Get-Mailbox -Filter {CustomAttribute1 -like 'TeamA'}
-Database 参数
“-Database” 参数会根据邮箱存储所在的数据库来筛选邮箱。它对于面向特定数据库的操作很有用,例如在迁移期间,或用于特定数据库的报表/统计。
Get-Mailbox -Database " Mailbox Database 1767124038"
-OrganizationalUnit 参数
-OrganizationalUnit 参数会将搜索范围缩小到位于特定 Active Directory 组织单元中的邮箱。对于具有结构化 OU 层级的大型组织来说,这一点尤其方便。
Get-Mailbox -OrganizationalUnit "OU=Versacorp,DC=MILKYWAY,DC=LOCAL"
-仲裁(Arbitration)参数
-Arbitration 开关参数用于检索仲裁邮箱。这些邮箱是用于存储组织数据的系统邮箱,例如管理员审计日志、 eDiscovery 信息以及其他与系统相关的任务。
Get-Mailbox -Arbitration
-审计日志(Audit Log)参数
-AuditLog 开关参数用于检索审计日志邮箱,这些邮箱包含管理员和用户执行的操作的审计日志。出于合规和监控目的,这一点非常重要。
Get-Mailbox -AuditLog
-收件人类型详细信息(RecipientTypeDetails)参数
此参数允许根据邮箱类型进行筛选,例如 UserMailbox、SharedMailbox、RoomMailbox 或 EquipmentMailbox 等。它便于针对特定类型的邮箱开展管理操作。
Get-Mailbox -RecipientTypeDetails SharedMailbox
-ResultSize 参数
参数 -ResultSize 用于限制 cmdlet 返回的结果数量。默认情况下,Get-Mailbox 最多检索 1000 个邮箱。将该参数设置为“Unlimited”可在不截断的情况下获取所有邮箱的详细信息;或者将其设置为较小的数字(例如 50)时,结果将按所提供的数值返回。
Get-Mailbox -ResultSize 10
-SoftDeletedMailbox 参数
检索已进行软删除但尚未永久移除的邮箱。此参数仅适用于 Exchange Online(Office365)。
Get-Mailbox -SoftDeletedMailbox
-Anr
-Anr(Ambiguous Name Resolution)参数与 -Identity 参数一起使用,用于搜索其指定字符串与邮箱的实际标识接近或相似的邮箱。当您不知道邮箱的确切名称或别名时,这会很有帮助。
Get-Mailbox -Anr "Adita"
-SortBy
此参数用于指定应按哪个属性对结果进行排序。例如,使用 -SortBy DisplayName 会根据邮箱的显示名称按字母顺序排列返回的邮箱列表。
Get-Mailbox -SortBy Name
常用参数
与 PowerShell 中的其他 cmdlet 一样,Get-Mailbox 支持常见参数,例如 -Verbose、-Debug、-ErrorAction、-ErrorVariable、-WarningAction、-WarningVariable、-OutBuffer、-PipelineVariable 和 -OutVariable。这些参数可以帮助控制 cmdlet 的消息输出、处理错误和警告,并在脚本和函数中管理输出。
cmdlet 可用的其他参数
-Archive: 返回已启用归档的邮箱
-AuxAuditLog: 返回辅助审核日志邮箱
-Credential: 指定用户名和密码
-DomainController: 指定域控制器
-GroupMailbox: 仅返回 Microsoft 365 Groups
-IgnoreDefaultScope: 忽略默认收件人范围
-InactiveMailboxOnly: 仅返回不活动的邮箱
-IncludeInactiveMailbox: 包括不活动的邮箱
-MailboxPlan: 按邮箱计划筛选结果
-Migration: 返回迁移邮箱
-Monitoring: 返回监控邮箱
-PublicFolder: 返回公用文件夹邮箱
-ReadFromDomainController: 从域控制器读取信息
-RemoteArchive: 返回远程归档邮箱
-Server: 按 Exchange 服务器筛选结果
精选相关内容:
组合参数
你可以组合多个参数来细化查询。下面是一些示例。
- 下面的 cmdlet 会检索在特定数据库中、收件人类型为“user”的所有用户邮箱。
Get-Mailbox -Database "Test3" -RecipientTypeDetails UserMailbox
- 下面的 cmdlet 会获取具有特定自定义属性的所有邮箱,并使用 -ResultSize 输出所有结果。
Get-Mailbox -Filter {CustomAttribute1 -eq “TeamA”} -ResultSize Unlimited
通过将 Get-Mailbox cmdlet 的输出管道传递给 Select-Object cmdlet,下面的示例 cmdlet 会从特定 OU 中为每个邮箱检索并生成一个自定义列表,显示显示名称、主要 SMTP 地址以及发送配额。此格式特别适用于生成报表或审计。
- 检索特定 OU 中的邮箱,并仅显示它们的显示名称和电子邮件地址。
Get-Mailbox -OrganizationalUnit "OU=Versacorp,DC=MILKYWAY,DC=LOCAL" | Select-Object DisplayName,PrimarySmtpAddress
- 列出所有包含详细属性的邮箱
Get-Mailbox | Select-Object DisplayName, PrimarySmtpAddress, ProhibitSendQuota
- 下面展示的是更复杂的示例,它结合多个 cmdlet 来识别在过去 90 天内未被访问的邮箱。
Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Where-Object {$_.LastLogonTime -lt (Get-Date).AddDays(-90)}
使用案例与方案场景
将 Get-Mailbox 与其参数结合使用,可以实现广泛的用途和场景,从而促进对电子邮件系统的有效管理、合规性、报表生成以及故障排查。下面是一些使用案例与方案场景。
邮箱审计与报表
生成关于邮箱大小、配额和使用情况的报表,以确保符合组织策略。下面的 cmdlet 不会产生任何结果。您可以前往 Export-CSV cmdlet 提供的位置并打开 CSV 文件,如下截图所示。
Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select DisplayName, TotalItemSize, ItemCount, StorageLimitStatus | Export-Csv -Path "MailboxReport.csv"
识别处于非活动状态或孤立的邮箱
查找在特定时间内未被访问的邮箱,这可能表明该邮箱处于非活动状态或是孤立的邮箱。此场景有助于清理邮件系统,通过识别已不再使用的邮箱,可能释放资源和许可证。
Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Where-Object {$_.LastLogonTime -lt (Get-Date).AddMonths(-6)} | Select DisplayName, LastLogonTime
管理邮箱配置
列出具有特定配置的邮箱,例如已启用转发或具备特定邮箱功能。
Get-Mailbox -ResultSize Unlimited | Where {$_.ForwardingAddress -ne $null} | Select DisplayName, ForwardingAddress
批量管理
执行批量操作,例如将邮箱进行迁移,或一次性将邮箱设置应用到多个邮箱。作为维护任务的一部分,将所有邮箱从一个数据库移动到另一个数据库。
Get-Mailbox -Database "DB01" | New-MoveRequest -TargetDatabase "DB05"
批量操作与委派
查找所有共享邮箱或委派邮箱,并从审计目的出发审查其被委派的用户。
Get-Mailbox -RecipientTypeDetails SharedMailbox -Database “Test3” | Get-MailboxPermission | Where {$_.AccessRights -contains "FullAccess"}
为邮箱设置配额
如果你想根据需要设置发送和接收配额,下面的 cmdlet 可以将配额设置为 5GB。你也可以根据实际情况使用你自己的数值。
Get-Mailbox -Identity "JackRobert" | Set-Mailbox -ProhibitSendReceiveQuota "5GB"
上面的 cmdlet 不会产生任何输出,但会设置该值。你可以使用下面的 cmdlet 来检查你使用上面的 cmdlet 设置的目标输出。
Get-Mailbox -Identity "JackRobert" | Select prohibitsendreceivequota
故障排除
诊断并排查与邮箱相关的问题,例如识别已超过配额的邮箱。查找已超过其发送配额的邮箱,以应对潜在的性能问题。
Get-Mailbox -ResultSize Unlimited | Where-Object { $_.ProhibitSendQuota -ne $null -and $_.ProhibitSendQuota -lt 5GB } | Select-Object DisplayName,PrimarySmtpAddress,ProhibitSendQuota
组织单位管理
在特定的组织单位(OU)内管理邮箱,例如应用特定的设置或配置。检索并将配置更改应用到“HR”OU中的所有邮箱。
Get-Mailbox -OrganizationalUnit "OU=Test,DC=MILKYWAY,DC=LOCAL " | Set-Mailbox -MaxSendSize 50MB
以上 cmdlet 不会生成任何结果,但会为指定 OU 内的所有用户设置消息的最大发送大小值。请使用下面的 cmdlet 进行确认。
Get-Mailbox -OrganizationalUnit "OU=Test,DC=MILKYWAY,DC=LOCAL " | Select MaxSendSize
委派访问
为管理或支持目的委派对邮箱的访问权限。为特定邮箱数据库中的所有邮箱授予对支持邮箱的完全访问权限。
Get-Mailbox -Database “Test3” | Add-MailboxPermission -User "administrator@milkyway.local" -AccessRights FullAccess
检查邮箱配额设置
检查邮箱配额设置很重要,因为它有助于确保用户不会超过组织设置的存储限制,从而可能影响电子邮件功能。
邮箱配额概览
邮箱配额用于限制邮箱可使用的存储空间大小。这些配额包括如下内容。
- 发送警告配额:当用户的邮箱接近其存储上限时发出警告的阈值。
- 禁止发送配额:当用户被禁止发送新邮件时所达到的阈值。
- 禁止发送和接收配额:当用户被禁止发送或接收新邮件时所达到的阈值。
要检查特定邮箱的配额设置,可以使用 Get-Mailbox cmdlet,并在其后跟上邮箱标识。这将返回邮箱的各种属性,包括配额设置。
Get-Mailbox -Identity "BarbaraCole" | Format-List IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota, UsedDatabaseQuotaDefaults
如果需要检查环境中多个或所有邮箱的配额设置,可以在不指定标识的情况下使用 Get-Mailbox cmdlet,输出相关的配额属性,并将数据导出到 CSV 文件,从而更容易分析和报告配额配置。
Get-Mailbox -ResultSize Unlimited -Database “Test3” | Select-Object DisplayName,ProhibitSendQuota,ProhibitSendReceiveQuota,IssueWarningQuota
示例 1:返回所有邮箱的汇总列表
使用 PowerShell 在 Exchange Online 或 Exchange Server 中返回所有邮箱的汇总列表,请使用以下 cmdlet。
下面的命令会在 PowerShell 控制台中输出一张表,表中包含所有邮箱的汇总信息,包括显示名称、别名、UPN、创建日期和主要电子邮件地址。该汇总提供快速概览,适用于报表、审计,或仅用于了解当前在 Exchange 环境中已建立的邮箱。
Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, Alias, UserPrincipalName, WhenCreated, PrimarySmtpAddress | Format-Table -AutoSize
下面的 cmdlet 将使用一些其他属性,例如 Database、ProhibitSendQuota、ProhibitSendReceiveQuota、IssueWarningQuota,并且还会包含显示名称和主要 SMTP 地址。
Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName,PrimarySmtpAddress,Database,ProhibitSendQuota,ProhibitSendReceiveQuota,IssueWarningQuota | Format-Table -Autosize
示例 2:返回特定数据库中归档邮箱的汇总列表
要在 Exchange Online 或 Exchange Server 中使用 PowerShell 返回位于特定数据库中的归档邮箱汇总列表,可以使用“Get-Mailbox and”和“Get-MailboxStatistics”这两个 cmdlet 的组合。该组合可先按承载数据库筛选邮箱,然后检查每个邮箱是否启用了归档。下面是实现这一目标的方法。
Get-Mailbox -Database "Test3" -Archive | Get-MailboxStatistics -Archive | Select-Object DisplayName, TotalItemSize, ItemCount | Format-Table -AutoSize
精选相关内容:
将 Get-Mailbox 与其他 cmdlet 组合使用(Get-Member、Select-Object、Format-List)
将 Get-Mailbox cmdlet 与其他 PowerShell cmdlet(如 Get-Member、Select-Object 和 Format-List)结合使用,可以帮助你更有效地检索、查看和格式化邮箱信息。
Get-Member
Get-Member cmdlet 用于检查 Get-Mailbox 返回的对象的属性和方法。这在发现哪些属性可用于选择或格式化时尤其有用。
Get-Mailbox -Identity "BarbaraCole@milkyway.local" | Get-Member
Select-Object
Select-Object cmdlet 允许你指定希望在输出中包含哪些属性。这对于创建定制的邮箱信息视图很有用。
Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, PrimarySmtpAddress,Database
Format-List
Format-List cmdlet 会将输出格式化为列表,显示所有属性及其对应的值。这样有助于更详细地查看邮箱对象的属性。
Get-Mailbox -Identity "BarbaraCole@milkyway.local" | Format-List DisplayName, PrimarySmtpAddress, ProhibitSendQuota
使用 Get-Mailbox 和 Set-Mailbox 进行批量操作
你需要为多个邮箱更新邮箱设置,例如设置特定邮箱配额,或启用/禁用归档。
下面的命令会查找“Test3”中的所有邮箱,并设置它们的配额设置。它会为每个邮箱更新 ProhibitSendQuota、ProhibitSendReceiveQuota 和 IssueWarningQuota。
Get-Mailbox -ResultSize Unlimited | Where-Object { $_.Database -eq "Test3" } | Set-Mailbox -ProhibitSendQuota 5GB -ProhibitSendReceiveQuota 6GB -IssueWarningQuota 4GB
使用筛选和排序结果
在处理大量信息时,你可以将数据集精确缩小到所需的内容;同时,排序有助于整理输出,便于更好地分析或生成报告。下面的 cmdlet 将展示如何在 Get-Mailbox 中使用筛选和排序机制。
在 Get-Mailbox 中使用筛选器
筛选 cmdlet 允许你指定条件,只在命令的输出中包含与这些条件匹配的对象。你可以在支持 -Filter 参数的 cmdlet 中直接应用筛选,或在更复杂、或不支持筛选的场景中使用 “Where-Object” cmdlet。
Get-Mailbox -ResultSize Unlimited | Where-Object {$_.CustomAttribute1 -eq "TeamA" -and $_.DisplayName -like "Barb*"}
使用 Get-Mailbox 对结果进行排序
排序有助于以更有意义的顺序组织数据,从而更容易读取和分析。你可以使用 “Sort-Object” cmdlet 来进行排序。该命令会检索所有邮箱,并按其显示名称(display name)进行字母顺序排序。
Get-Mailbox -ResultSize 10 | Sort-Object DisplayName
将结果导出为 CSV
要将结果导出到 CSV 文件,PowerShell 提供了 “Export-Csv” cmdlet。该 cmdlet 会从管道获取输入,并将其写入到指定的 CSV 文件。举例来说,如果你想导出一份包含 Exchange 邮箱及其大小和使用详情的列表,可以使用下面的 cmdlet。你需要在 -Path 参数中指定 CSV 文件的路径和文件名。
Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select-Object DisplayName, TotalItemSize, ItemCount | Export-Csv -Path "C:\Exports\MailboxDetails.csv" -NoTypeInformation
对结果进行分组和格式化
对结果进行分组和格式化能够显著提升数据输出的可读性。PowerShell 提供了诸如 Group-Object、Format-Table、Format-List 等 cmdlet,可用于这些目的。
分组结果
Group-Object cmdlet 用于根据属性值对对象进行分类。这在按属性(例如部门或自定义属性)对邮箱进行排序时特别有用。
Get-Mailbox -ResultSize Unlimited | Group-Object -Property CustomAttribute1
格式化结果
在对数据进行分组之后,或在展示任何数据时,恰当的格式化可以让输出更易于阅读。Format-Table 通常缩写为“ft”,以表格格式显示数据。当你希望以列的形式查看结果时,它非常理想。你可以指定要显示的属性,甚至可以控制列宽。
Get-Mailbox -Identity "BarbaraCole@milkyway.local" | Format-Table DisplayName,UserPrincipalName,WhenCreated,PrimarySmtpAddress,database -AutoSize
使用“Format-List”
Format-List(缩写为“fl”)会在新的一行中显示对象的每个属性,因此适用于需要更详细查看较少对象的情况,或当对象有很多属性而这些属性不太适合放在表格中时。
Get-Mailbox -Identity "BarbaraCole" | Format-List DisplayName, PrimarySmtpAddress, EmailAddresses
Exchange Online 中 cmdlet 行为的差异
与在本地部署的 Exchange 中使用相比,Get-Mailbox cmdlet 在 Exchange Online 中的行为会略有不同。这些差异主要来自 Exchange Online 的云端架构以及多租户设置,它们会影响管理员与邮箱交互的方式以及 cmdlet 的适用范围。下面列出了一些关键差异。
- 在 Exchange Online 中,为了维持整体服务性能,cmdlet 操作可能会受到“限流”(throttling)的影响;在较大的环境中,为了避免触及限流限制,操作可能会耗时更长,或需要进行批处理。
- Exchange Online 为了适配 Office 365 中多种服务的需要,包含了更多的收件人类型及其详细信息。因此,你可能会遇到仅在云环境中存在、不在本地部署 Exchange 中出现的收件人类型。
- 由于托管环境的性质,on-premises Exchange 中可用的某些属性和特性可能在 Exchange Online 中不存在或无法访问。Exchange Online 的邮箱可能具有与云环境相关的其他属性,例如许可信息和邮箱计划。
- Exchange Online 中用于云管理的默认输出是不同的,能够提供与云管理员更相关的信息。默认显示的属性集合以及内置筛选条件可能与 on-premises Exchange 中的设置不同。
- 由于 Exchange Online 的多租户架构,Get-Mailbox 的作用范围仅限于组织的邮箱。在混合环境中,要管理本地(on-premises)的邮箱,管理员需要使用 on-premises Exchange Management Shell。
- Exchange Online 与其他 Office 365 服务紧密集成,提供先进的安全与合规功能。Get-Mailbox 的行为可能会反映这些集成,例如与诉讼保留(litigation hold)、eDiscovery 或高级威胁防护(Advanced Threat Protection)相关的标记或属性。
使用 Get-EXOMailbox 提升性能
Get-EXOMailbox 是为 Exchange Online 环境设计的 cmdlet。与传统的 Get-Mailbox cmdlet 相比,它针对 Exchange Online 的云端特性提供了改进的性能以及特定功能。Get-EXOMailbox 针对通过远程连接更快的执行进行了优化,因此在从 Exchange Online 检索邮箱信息时更高效。连接需要现代身份验证,具体取决于你的环境配置,可能还包括多因素认证(MFA)。
Connect-ExchangeOnline -UserPrincipalName administrator@milkyway.com
下面是一些示例,展示如何使用 “Get-EXOMailbox” 来执行常见的管理任务。
Get-EXOMailbox -ResultSize Unlimited
按收件人类型筛选
Get-EXOMailbox -RecipientTypeDetails SharedMailbox | Format-Table -Autosize
按归档状态筛选
Get-EXOMailbox -Filter { ArchiveStatus -eq "Active" } Format-Table -Autosize
Office 365 中的归档(Archiving)是高级功能。我使用将 ArchiveStatus 设置为 None 的方式来展示如下输出;如果存在启用了归档功能的邮箱,上述 cmdlet 将会生效。
选择特定属性
Get-EXOMailbox -ResultSize Unlimited | Select-Object DisplayName,PrimarySmtpAddress,UserPrincipalName
按显示名称排序
Get-EXOMailbox -ResultSize Unlimited | Select-Object DisplayName,UserPrincipalName | Sort-Object DisplayName
适用于 Exchange Online 的 Get-Mailbox 专有参数
Get-Mailbox cmdlet 包含一些参数:这些参数要么是 Exchange Online 独有,要么相较于本地部署的 Exchange Server 环境,在云托管环境中更具相关性。上述专有参数体现了在云中管理邮箱的独特特征,例如处理许可(licensing)、列出非活动邮箱,或检索软删除(soft deleted)的邮箱。
-InactiveMailboxOnly
您可以使用 -InactiveMailboxOnly 参数来选择是否仅将结果限制为非活动邮箱。此开关不需要指定值。
在软删除之前已设置诉讼保留(litigation hold)或就地保留(in-place hold)的邮箱将被视为非活动邮箱。
-MailboxPlan
此参数会将命令返回的邮箱过滤为仅与特定邮箱计划相关联的邮箱。在存在多个邮箱计划的环境中(例如组织内针对不同部门或角色配置不同的计划),此功能尤其有用。
-IncludeInactiveMailbox
此参数会在结果中包含非活动邮箱。非活动邮箱通常与已删除或已取消配置的用户相关,但会为数据保留目的而保留一段时间,尤其对合规性和 eDiscovery(电子数据展示)非常重要。
-SoftDeletedMailbox
此参数会在结果中包含已进行“软删除”的邮箱。软删除的邮箱是在通过 Office 365 管理中心或通过 PowerShell 删除邮箱时发生的,但会保留一段时间,以便允许恢复。
Get-Mailbox 最佳实践
在使用 Get-Mailbox cmdlet 管理 Microsoft Exchange 环境中的邮箱时,遵循最佳实践能够确保获得最佳性能、安全性和可管理性。下面是一些关键的最佳实践供您参考。
限制查询的范围
使用筛选器将结果缩小到仅你关心的邮箱。这会降低系统负载,并让你更快获取所需信息。在运行“Get-Mailbox”时(尤其是在大型环境中),尽量将命令的作用范围限制在必要的邮箱上。使用诸如“-RecipientTypeDetails”或“-OrganizationalUnit”之类的参数来进一步缩小结果范围,并减少对 Exchange 服务器的负载。
使用服务器端筛选
在可能的情况下,使用能够在服务器端执行筛选的 cmdlet 参数,而不是将所有对象加载到内存中,再用“Where-Object”在客户端进行筛选。这样可以提升性能与效率。利用“-Filter”参数执行服务器端筛选。此方法更高效,并能减少通过网络传输的数据量。
明智地使用结果大小限制
使用“ -ResultSize Unlimited ”参数时要谨慎,尤其是在大型环境中。虽然它对于全面的操作是必要的,但也可能导致性能问题。考虑将大型操作拆分为更小的部分来进行。
选择性属性检索
默认情况下,Get-Mailbox 会为每个邮箱检索大量属性,这些属性不一定总是需要。请使用“ -Properties ”参数仅指定所需的属性,或使用“Select-Object”来精简结果。这可以显著提升性能。
高效使用通配符
在筛选器中使用通配符(*)时,请注意:如果使用过多或使用不当,可能会导致性能问题。请在查询中谨慎放置通配符,以确保其尽可能高效。
明智地与其他 Cmdlet 组合
通常,“Get-Mailbox” 会与其他 cmdlet 配合使用,用于诸如修改邮箱或生成报表之类的任务。当将 “Get-Mailbox” 通过管道传递给其他 cmdlet 时,请确保最初的 “Get-Mailbox” 命令尽可能有针对性,以避免不必要的处理。
了解 RecipientTypeDetails 的影响
该参数对于定位特定类型的邮箱非常有用(例如 UserMailbox、SharedMailbox 等)。理解并有效使用该参数有助于执行更精确的操作。
安全与合规
在运行可能会 暴露敏感信息的“Get-Mailbox”脚本或命令时, 请确保符合贵组织的安全策略。仅允许授权人员访问这些脚本及其输出结果。
测试并验证脚本
在运行基于“Get-Mailbox”输出结果进行更改的脚本之前,尤其是在生产环境中,请务必在非生产环境中对脚本进行充分测试。验证所选邮箱以及拟进行的更改内容,以避免产生非预期的影响。
定期审查并更新脚本
随着 Exchange 环境不断发展,脚本和命令也应随之更新。定期审查并更新它们,确保使用的是最高效的方法,并与当前的最佳实践保持一致。
保持最新
确保您的用于 Exchange 的 PowerShell 会话或模块保持最新。Microsoft 会定期更新 Exchange Online 的 PowerShell cmdlet,引入新功能和改进,从而增强您的脚本编写能力。
精选相关内容:
Get-Mailbox 故障排查常见问题
在使用 Get-Mailbox cmdlet 时,您可能会遇到一些问题或出现意外行为。下面列出了若干常见问题,以及相应的故障排查步骤和解决方案,帮助您有效解决。
未识别的 Cmdlet
您可能会收到一条错误消息,提示“Get-Mailbox”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。
故障排查步骤
- 请确保在 Exchange Management Shell(适用于 Exchange Server)中运行该 cmdlet,或已使用“Connect-ExchangeOnline”(适用于 Exchange Online)连接到 Exchange Online PowerShell。
- 对于 Exchange Online,请确保已安装 Exchange Online PowerShell 模块,并且是最新版本。
- 检查你的 PowerShell 会话:你可能正在使用一个默认不会加载 Exchange cmdlet 的会话。
权限不足
你已连接到 Exchange Online 或 Exchange Server,但在尝试执行“Get-Mailbox”时收到与权限相关的错误。
故障排除步骤
- 确认你正在使用的帐户具有所需权限(例如:Exchange Online 的 Exchange Admin 角色,或 Exchange Server 中适当的 RBAC 角色)。
- 对于 Exchange Online,请确保如果你的帐户需要的话,已正确设置多因素身份验证(MFA)。
- 在 Exchange Server 中,请检查该帐户是否已明确获得使用“Get-Mailbox”的访问权限,或是否已添加到允许执行该操作的角色中,例如 Recipient Management 角色。
不完整或非预期的结果
“Get-Mailbox” cmdlet 无错误执行,但会返回不完整或非预期的结果。
故障排除步骤
- 使用 “-ResultSize” 参数,以确保查询到所有预期的邮箱。默认设置可能不会返回所有邮箱。
- 使用 “-Filter” 参数进一步细化查询,以确保其准确反映你想应用的筛选条件。
- 检查是否存在可能会限制结果的服务器端或客户端筛选选项。
- 对于 Exchange Online,节流策略有时会导致命令执行延迟,请考虑在稍短间隔后重试。
性能问题
该 cmdlet 执行所需时间较长,尤其是在包含大量邮箱的环境中。
故障排查步骤
- 使用“ -ResultSize ”、“ -Filter ”或“ -OrganizationalUnit ”等其他特定参数来限制查询范围,以缩小结果集并提升性能。
- 如果需要处理大量邮箱,请考虑将任务拆分为更小的批次。
- 对于 Exchange Online,请确保使用的是针对大规模数据集优化的 Exchange Online Management Module 的最新版本。
连接问题
当您尝试在 Exchange Online 中使用“Get-Mailbox”时,可能会遇到连接问题。
故障排除步骤
- 确保您的互联网连接稳定。
- 通过查看 Office 365 Service Health 仪表板,确认是否没有正在发生且影响 Exchange Online 的服务事件。
- 使用“Connect-ExchangeOnline”重新建立与 Exchange Online 的 PowerShell 会话,因为会话超时或网络变更可能会中断连接。
脚本执行策略限制
当运行包含“Get-Mailbox” cmdlet 的脚本时,可能会遇到与 PowerShell 脚本执行策略相关的限制。
故障排除步骤
- 使用“Get-ExecutionPolicy”检查当前的 PowerShell 执行策略。
- 如有必要,请使用“Set-ExecutionPolicy”并设置适当的级别(例如 RemoteSigned),以允许脚本运行,同时考虑安全影响。
面向初学者的 Windows PowerShell 脚本教程(PDF)
了解更多常见问题解答
为什么 PowerShell 中无法识别 Get-Mailbox?
出现“Get-Mailbox not recognized”错误是因为在你的 PowerShell 会话中没有加载 Exchange Management Shell 模块。此 cmdlet 仅适用于 Exchange Server,并需要相应模块才能工作。对于 Exchange Online,你需要安装并连接 Exchange Online PowerShell V2 模块:
Install-Module ExchangeOnlineManagement
对于本地部署的 Exchange,请确保从 Exchange Management Shell 运行 PowerShell,或已导入 Exchange 模块。安装完成后,请使用以下命令连接:
# For cloud environments
Connect-ExchangeOnline
# For on-premises
Import-Module Exchange
cmdlet 名称也会因版本而异——Exchange Online 在大型环境中使用 Get-EXOMailbox 以获得更好的性能,而传统 Exchange 使用 Get-Mailbox。
如何连接到 Exchange Online PowerShell?
连接到 Exchange Online PowerShell 需要 Exchange Online Management 模块以及正确的身份验证。首先,在具备提升权限的 PowerShell 会话中安装该模块:
Install-Module -Name ExchangeOnlineManagement
然后进行连接:
Connect-ExchangeOnline
系统将提示输入您的 Office 365 凭据。为获得更好的安全性,请使用现代身份验证:
Connect-ExchangeOnline -UserPrincipalName youradmin@domain.com -ShowProgress
连接过程中会自动处理多因素身份验证。连接完成后,在大型环境中可使用 Get-EXOMailbox 替代 Get-Mailbox 以获得更好的性能。完成后请务必断开连接:
Disconnect-ExchangeOnline
此连接方式可为 Exchange Online 管理功能提供完全的管理权限。
如何使用 PowerShell 检查邮箱权限?
检查邮箱权限需要将 Get-Mailbox 与 Get-MailboxPermission cmdlet 结合使用,以获取全面的访问信息。使用以下命令查看谁可以访问特定邮箱:
Get-MailboxPermission -Identity username@domain.com
这里显示 Full Access、Send As 和 Send on Behalf 权限。进行批量分析时,将 Get-Mailbox 的结果通过管道传递给 Get-MailboxPermission:
Get-Mailbox | Get-MailboxPermission
输出会显示每个权限条目的 AccessRights、User 和 Deny 设置。要识别过度权限,请使用 Where-Object 过滤结果:
Get-MailboxPermission -Identity username@domain.com | Where-Object {$_.User -notlike "NT AUTHORITY*"}
这种方法可以让您清楚地了解谁可以访问哪些邮箱数据,这对于维护 least privilege access 以及合规要求至关重要。
如何将邮箱列表导出为 CSV?
将邮箱列表导出为 CSV 会将 Get-Mailbox 与 Export-CSV cmdlet 结合起来,以生成全面的报表。进行基础导出:
Get-Mailbox | Select-Object DisplayName, PrimarySmtpAddress, RecipientTypeDetails | Export-CSV -Path "C:\MailboxList.csv" -NoTypeInformation
如需更详细的报表,请包含其他属性:
Get-Mailbox | Select-Object DisplayName, PrimarySmtpAddress, TotalItemSize, ProhibitSendQuota, LastLogonTime | Export-CSV -Path "C:\DetailedMailboxList.csv" -NoTypeInformation
Select-Object cmdlet 用于控制导出中显示哪些邮箱属性,而 Export-CSV 则负责文件格式化。对于大型环境,建议在 Exchange Online 中使用 Get-EXOMailbox 以获得更好的性能。添加筛选条件以导出特定邮箱类型:
Get-Mailbox | Where-Object {$_.RecipientTypeDetails -eq "UserMailbox"} | Export-CSV -Path "C:\UserMailboxes.csv" -NoTypeInformation
该方法会生成结构化的数据文件,非常适用于合规报告、容量规划以及安全审计。
Get-Mailbox vs Get-EXOMailbox:该用哪个?
Get-EXOMailbox 是 Exchange Online 环境中对 Get-Mailbox 的现代替代方案,可为大型组织提供显著更好的性能。使用 Get-EXOMailbox 来处理 Exchange Online,因为它针对云规模操作进行了优化,并可自动处理分页。语法几乎保持不变,但 Get-EXOMailbox 能更快地处理结果,并使用更少的内存。对于本地部署的 Exchange Server,你必须使用 Get-Mailbox,因为传统的 Exchange Management Shell 中并不存在 Get-EXOMailbox。在混合环境中,请为每种环境使用相应的 cmdlet:云端邮箱使用 Get-EXOMailbox,本地邮箱使用 Get-Mailbox。Microsoft 建议对所有新的 Exchange Online 脚本使用 Get-EXOMailbox,并逐步将现有脚本迁移以获得更好的性能和未来兼容性。
分享到
了解更多
关于作者
Kevin Horvatin
首席软件架构师
Kevin Horvatin 是 Netwrix 的首席软件架构师,负责 Netwrix Privilege Secure。作为一名拥有 20 多年经验的软件开发人员,自 PowerShell 和 C# 推出以来,他一直与它们合作开发。