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

[玩转系统] 升级您的 Exchange Online 脚本以使用 Get-EXOMailbox Cmdlet

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

升级您的 Exchange Online 脚本以使用 Get-EXOMailbox Cmdlet


放弃获取邮箱;它已经到了它的时代

最近,我撰写了有关 New-DistributionGroup cmdlet 的文章,以解释为什么我认为通讯组列表仍然如此有价值,尽管 Microsoft 尽了最大努力让世界相信 Microsoft 365 组更好。今天,我想讨论一个更基本的 cmdlet,以了解许多人通过 PowerShell 使用 Exchange 的经验:Get-Mailbox。或者更准确地说,是新的和改进的 Get-ExoMailbox

Microsoft 推出 Get-ExoMailbox 作为 2019 年升级的九个初始 cmdlet 之一,以使用 REST API(如 Microsoft Graph)而不是远程 PowerShell (RPS),这是有充分理由的。获取要处理的邮箱集是任何 Exchange 管理员的一项基本活动。 Get-Mailbox 可以工作,但速度慢且容易出错,尤其是在处理大量对象时。在这方面,它与其他远程 PowerShell cmdlet 具有相同的缺陷。事实上,Get-Mailbox 被如此频繁地使用来处理如此多的数据,这使得它看起来比同类问题更多。事实并非如此。相反,Get-Mailbox 揭示了依赖于与指定远程服务器的连接所固有的所有缺陷,该服务器可能会也可能不会在整个会话中保持可用。

三步换在线PowerShell幸福

无论如何,到目前为止,您应该已将 Exchange Online 脚本转换为:

  • 使用 Exchange Online 管理模块而不是远程 PowerShell。
  • 使用 Connect-IPPSSession cmdlet 连接到合规性端点。当前版本的 Exchange Online 管理模块允许并发会话连接到 Exchange 管理和合规性。
  • Get-Mailbox 切换为使用 Get-ExoMailbox,并同时切换其他重要的 cmdlet。最紧迫的三个开关是 Get-ExoMailboxStatisticsGet-ExoMailboxFolderStatisticsGet-ExoMailboxPermission

Exchange 本地不存在 Exchange Online 管理模块和基于 REST 的 cmdlet。 Exchange Online 基础设施的工作方式揭示了远程 PowerShell 中的一些缺陷,而这些缺陷在本地部署中不会发生,因此 Microsoft 尚未将新的 cmdlet 移至那里。这会发生吗?我不知道,但如果强迫我猜测,我会说不。但永远不要说永远。

Exchange Online 管理版本 2.0.5

说到版本,微软于5月10日发布了Exchange在线管理模块V2.0.5,目前还没有更新该模块的发行说明,所以我们不知道新版本有哪些内容。无论如何,我上周一直在运行 2.0.5,一切看起来都很稳定。已有 70,000 多人下载了 2.0.5,到目前为止我还没有听说有任何问题。

优化邮箱数据

回到Get-ExoMailbox,我一次又一次听到的重大升级问题是在获取邮箱数据时需要指定属性。这是对 Get-Mailbox 行为的更改,旨在优化邮箱数据的获取。问题在于邮箱的属性跨越数百个不同的项目,其中一些需要使用 Azure AD 获取或验证。如果你做类似的事情:

Get-Mailbox -Identity TRedmond

您获取邮箱的所有属性。但如果你运行:

Get-ExoMailbox -Identity TRedmond

Exchange Online 仅检索 15 个属性。这些是最重要的,例如显示名称、用户主体名称、电子邮件地址和未充分利用的ExternalDirectoryObjectId。这是指向拥有邮箱的 Azure AD 帐户的指针 (GUID)。连接到 Azure AD 的所有启用 Exchange Online 邮件的对象都具有此属性,以便轻松连接到 Azure AD。使用 GUID 来引用对象在 Office 365 中非常常见,特别是在每次调用图形 API 来获取有关对象的数据时,因此最好习惯使用 GUID。

例如,我可以这样做:

Get-AzureADUser -ObjectId ((Get-ExoMailbox -Identity [email protected]).ExternalDirectoryObjectId) | Select ObjectId, DisplayName

ObjectId                             DisplayName
--------                             -----------
f1dbb86a-69bf-4245-8bc7-5e1d09d9d8cc Tony Redmond (Office 365 for IT Pros)

我可以获取 Azure AD 返回的 ObjectId 并将其与 Get-ExoMailbox 一起使用:

Get-ExoMailbox -Identity f1dbb86a-69bf-4245-8bc7-5e1d09d9d8cc

由于 Get-ExoMailbox 对获取的内容非常谨慎,因此您通常需要在调用中包含获取单个属性或属性集的请求(属性集是某些用途所共有的属性的集合,例如配额)。例如,WhenCreated 属性不是基本的 15 个属性之一,因此如果我想使用它,我必须将其包含在调用中:

Get-ExoMailbox -Identity TRedmond -Properties WhenCreated

巨大的好处

迁移到 Get-ExoMailbox 的好处包括:

  • 更好的性能,尤其是在处理大量邮箱时。您的里程会根据您所做的事情而有所不同,但当我在 Microsoft Ignite 2019 上公开测试新的 cmdlet 时,处理数千个邮箱的速度提高了三到四倍。如果您只获取几个邮箱,您不会看到太多好处。另一方面,要处理大量邮箱,Graph API 可能是更好的解决方案。
  • 更好的可靠性Get-ExoMailbox 和其他基于 REST 的 cmdlet 能够更好地处理服务器问题。如果您正在获取数千个邮箱,那么您最不想看到的就是 Exchange Online 切换域控制器(即使在云中,这种情况也会发生)。远程 PowerShell 将失败。 Get-ExoMailbox 可能会成功完成(错误总是不可预测的)。

执行摘要是,将脚本转换为使用新 cmdlet 时的一些短期痛苦将通过性能和可靠性的长期收益得到数倍的回报。这是正确的做法,任何建议使用旧 cmdlet 编写代码的人都应该被要求重新考虑他们的选择,并带有一点点强制力。

我是否提到过 Exchange Online 管理模块支持 Ubuntu Linux?好吧,也许这对观众来说并不那么重要,但这是事实。

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

取消回复欢迎 发表评论:

关灯