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

[玩转系统] 大规模在线管理 Exchange

作者:精品下载站 日期:2024-12-14 04:03:40 浏览:14 分类:玩电脑

大规模在线管理 Exchange


在公司有效迁移到 Microsoft 365 并采用新的云服务后,租户中的对象(例如用户、来宾和组)数量不断增长。这同样适用于 Exchange Online。

即使您遵循 Microsoft 365 组过期或身份生命周期管理的指南,结果也是相似的 - 您正在管理的对象数量正在增加,这对管理员来说越来越成为挑战。在本文中,我们将研究如何使用 PowerShell 大规模管理 Exchange Online。

维护大量对象

众所周知,微软正在不断开发不同的门户和管理中心,供管理员日常使用来管理服务。最近,微软宣布新的 Exchange 管理中心正式上线。

新门户的驱动因素之一是性能和执行批量操作的能力。它基于 REST,旨在最大限度地减少等待时间、减少错误等等。简而言之,它可以改善您作为管理员的体验。

PowerShell 可以赋能

尽管对 Exchange 的新管理中心进行了改进,但它在功能方面仍然有限,并且为性能提升留下了空间。要看到改进,您必须离开管理中心并使用 PowerShell。特别是对于 Exchange Online,您需要安装并使用 Exchange Online PowerShell (EXO) V2 模块。

该模块结合了旧版 cmdlet 以及新的 cmdlet。截至今天,九个新的 cmdlet 利用了新的基于 REST 的架构。九个可能看起来不多,但考虑到您每天执行的操作,它们就足够了。

您使用的大多数命令用于检索邮箱或收件人属性或统计信息,例如有关邮箱或邮箱中所有文件夹的信息。

新的 cmdlet 允许您减少请求的属性数量,从而减少通过线路传输的数据。执行此操作的能力称为属性集,此处对其进行了更详细的描述。

将新的 cmdlet 架构与使用属性集等较小的改进相结合可以提高性能。但是,由于属性集不是自动定义的,因此您需要了解将脚本更新到新 cmdlet 时需要检索的内容。

除了新的架构之外,PowerShell 的使用还解锁了多项任务。您可以根据过滤轻松执行批量操作,它还允许您收集甚至在新的 Exchange 管理中心中不可见的属性。

服务器端过滤比您想象的更重要

需要强调的是,目前 Microsoft 建议使用 Exchange Online V2 模块进行客户端筛选以获得最佳性能。然而,这适用于此模块。

下面是一个简短的示例,突出显示了差异:

# client-side filtering
Get-EXOMailbox -ResultSize 20000 | Where-Object -FilterScript {$_.RecipientTypeDetails -eq 'UserMailbox'}

# server-side filtering
Get-EXOMailbox -ResultSize 20000 -RecipientTypeDetails UserMailbox 

在第一个示例中,过滤发生在您的客户收到所有项目之后。第二个例子要求服务器在云端进行过滤,然后将结果发送给客户端。这至少有两个含义,即每个示例的结果提供不同的输出。

首先,我们指定参数“-ResultSize 20000”。这意味着我们将收到 20000 个邮箱,但是,除了 UserMailbox 之外,该集合很可能还包含多种类型的对象。例如:

[玩转系统] 大规模在线管理 Exchange

其次,这说明了另一个问题——您可能无法检索到您期望的所有对象。正如您在上面的示例中看到的,只有 13219 是 UserMailbox。

然而,当使用服务器端过滤器时,我们将收到正确的结果:

[玩转系统] 大规模在线管理 Exchange

因此,在使用服务器端过滤器时,为了确保您收到准确的结果,可能需要降低性能。

将 Microsoft Graph 与 PowerShell 结合使用以获得最佳性能

应该注意的是,如果您需要使用PowerShell修改对象,则仅限于Exchange Online V2 PowerShell模块。遗憾的是,Microsoft Graph 目前不提供更改 Exchange Online 属性的方法。

但是,这并不意味着您根本无法使用 Microsoft Graph。由于它的目的是快速检索数据,因此您可以绕过 Exchange Online V2 模块的开销来筛选要检索的数据。

执行此操作时,必须确保 Microsoft Graph 支持要使用的筛选器。但对于大多数情况,您应该能够做到。 Microsoft Docs 上提供了 Microsoft Graph 支持的查询参数的完整列表。

在将 Exchange Online V2 模块与图形脚本结合使用之前,您需要考虑是否值得。为了深入了解这何时会产生影响,请考虑某些模块的开销可能会产生巨大的影响。

在本地环境中,您可以利用带有筛选器的 LDAP 查询并将结果传递到 Exchange。这样,您可以显着提高整体性能,因为 LDAP 针对查询进行了优化。同样的原则也适用于 Microsoft Graph。

以下是使用 Exchange 模块的查询示例以及使用 Microsoft Graph 的相应查询:

# Exchange command
Get-User -Filter {Department -like 'Reta*'} 
# Microsoft Graph request
https://graph.microsoft.com/v1.0/users?$filter=StartsWith(Department,'Reta')

对 PowerShell 脚本进行多线程处理提供了另一种提高性能的选项

虽然这种技术更先进,但它可以将性能提高到您从未见过的水平。

简而言之,多线程意味着您从正在运行的 PowerShell 脚本中分出多个线程(您可以将其视为子进程),并让每个线程在客户端和服务器端运行您的代码。该技术主要用于收集数据。优点是您可以为您的作业执行横向扩展,并且多个线程可以并行工作,而不是按顺序工作。 Exchange Online V2 PowerShell 模块在体系结构中使用了此功能。为了让您了解使用多线程的强大功能,请看第一个单线程示例:

[玩转系统] 大规模在线管理 Exchange

在使用多线程的第二个示例中,我们发现检索时间缩短了 44%:

[玩转系统] 大规模在线管理 Exchange

从一个 PowerShell 会话管理多个 Exchange Online 环境

新的 Exchange V2 模块的另一项功能是能够在一个 PowerShell 会话中连接到多个租户。这在租户到租户的迁移过程中非常有帮助。但是,在使用该功能之前,您需要注意一些重要的先决条件和限制:

  • 您需要确保为每个连接添加前缀 - 如果不这样做,您将仅检索上次建立的会话中的对象。
  • 新的 cmdlet Get-EXO* 已添加前缀,并且仅适用于最后建立的连接

在以下示例中,我连接到源租户和目标租户。由于新的 cmdlet 仅适用于最后建立的连接,因此我首先连接到目标,因为我想利用新的 cmdlet 来收集数据:

[玩转系统] 大规模在线管理 Exchange

注意:为了区分对象和租户,我选择了 PrimarySmtpAddressUserPrincipalName

我使用了以下命令和顺序:

# connect to target tenant
Connect-ExchangeOnline -UserPrincipalName [email protected] -Prefix Target
# connect to source tenant
Connect-ExchangeOnline -UserPrincipalName [email protected] -Prefix Source

概括

我希望本文为您提供信息和动力,让您在需要管理许多对象和/或大规模对象时开始研究管理 Exchange Online 环境的其他方法。

请记住,您不仅可以使用 Exchange Online V2 模块进行 PowerShell 管理。您应该尝试利用多种工具(例如 Microsoft Graph)来提高脚本和管理任务的性能。使用这些技术,您可以建立坚实的基础,以减少从环境中检索信息和统计数据所需的时间,并构建脚本来自动执行日常任务。

[玩转系统] 大规模在线管理 Exchange

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

取消回复欢迎 发表评论:

关灯