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

[玩转系统] 使用 PowerShell 获取 Exchange Online 通讯组列表成员计数

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

使用 PowerShell 获取 Exchange Online 通讯组列表成员计数


推进旧脚本

最近,我撰写了有关 New-DistributionGroup cmdlet 的文章,并解释了即使 Microsoft 推出 Microsoft 365 组作为所有协作问题的解决方案,通讯组列表仍然如此有用。一位读者立即写信说 Exchange Online 中的通讯组与 Exchange Server 中的通讯组不同,并指出为本地使用编写的 PowerShell 脚本通常无法在云中运行。他们甚至引用了 2015 年一篇实用 365 文章,讲述如何报告通讯组列表中的成员数量作为示例。

该脚本旨在突出显示可能导致“全部回复”邮件风暴的类型的大型通讯组列表。微软最近更新了 Exchange Online 的全部回复控制设置,以降低邮件风暴的可能性,但毫无疑问,了解是否存在任何非常大的通讯组列表以及更重要的是,谁在照顾这些怪物是个好主意。

放开“获取邮箱”;它已经过了它的时间 - 阅读有关移动 Exchange Online 脚本以使用 Get-ExoMailbox 的更多信息

Get-ADGroupMember 和 Get-AzureADGroupMember 之间的区别

原始脚本依赖于Get-ADGroupMember cmdlet(对于Active Directory)递归获取通讯组列表成员的能力。换句话说,如果通讯组列表包含嵌套通讯组列表,您需要获取所有成员的详细信息,以了解有多少收件人将收到发送到该列表的邮件。 Exchange 传输服务在其扇出过程中扩展通讯组列表,以便为收件人创建邮件副本,此时收件人的完整数量是已知的。

将原始脚本转移到云端的问题在于,等效的 Get-AzureADGroupMember cmdlet 不处理递归。 Groups Graph API 具有可传递成员调用,可返回“所有嵌套成员的平面列表”,但 PowerShell cmdlet 尚未具备该功能。为了展示传递成员的工作原理,图 1 显示了调用 https://graph.microsoft.com/v1.0/groups/4f6a1e58-84cc-4365-b339-7520508c1cbc/transitiveMembers 的结果使用 Graph Explorer 工具检索包含嵌套列表的通讯组列表的成员。

[玩转系统] 使用 PowerShell 获取 Exchange Online 通讯组列表成员计数

如果您从未使用过 Graph Explorer,则应该花一些时间来习惯它,因为这是学习如何与 Graph API 调用交互的好方法。

组和列表

通讯组列表是启用 Exchange 邮件的对象,存在于 Exchange Online 目录 (EXODS) 和 Azure AD 中。它们在 Exchange 领域被称为通讯组列表,在 Microsoft 365 中更广泛地被称为通讯组,或者只是 Azure AD 中的组。在成员数量方面,Microsoft 365 组更容易处理。首先,您无法嵌套 Microsoft 365 组。其次,只有租户和来宾帐户才能成为会员。第三,Get-UnifiedGroup cmdlet 返回租户成员和来宾成员的计数。请参阅本文,了解如何报告 Microsoft 365 组成员身份的示例。

返回 PowerShell

编写一个脚本来使用 Graph API 获取嵌套通讯组列表的成员资格很简单,但让我们回到基本的 PowerShell 并考虑如何解决与 Get-ADGroupMember 相同的问题本地。

在本文中,Vasil Michev 深入研究了生成组织中所有组的所有成员的列表所涉及的问题,包括 Microsoft 365 组、动态通讯组列表等。虽然我们可以调整 Vasil 的脚本来完成我们想要的事情,但这没有什么乐趣,所以我花了一个小时左右想出了一个解决方案来解决识别大型通讯组列表的问题。

成功的 PowerShell 黑客的第一条规则是永远不要重复造轮子。开始一个编码项目时,一定要通过搜索来看看人们做了什么来解决你面临的问题,或者至少是部分问题。在本例中,通过搜索人们如何处理嵌套 Azure AD 组的问题,发现了几个有用的函数,其中包括我决定在脚本中使用的函数。

新编码的解决方案

代码相当简单。首先,查找租户中的所有通讯组列表,不包括用于房间列表的通讯组列表。

对于每个列表,我们都会找到其成员资格。在此示例中,我使用Get-AzureADGroupMember而不是Get-DistributionGroupMember。两者都可以。我的决定是因为我改编的功能使用了 Azure AD。查找成员资格涉及确定哪些成员是简单成员(用户帐户、来宾帐户和邮件联系人)以及哪些是组。每个嵌套组的成员资格都会被解析并添加到总体成员资格中。最后,脚本从成员资格中删除所有重复的条目。

处理通讯组列表后,该脚本会提取有关成员、租户帐户、来宾帐户、组和“其他”(主要是邮件联系人)数量的一些统计信息。该脚本还生成成员列表。此信息存储在 PowerShell 列表中。

脚本处理完所有分发列表后,它会输出一个 CSV 文件并通过 Out-GridView cmdlet 显示结果(图 2)。

[玩转系统] 使用 PowerShell 获取 Exchange Online 通讯组列表成员计数

您可以从 GitHub 下载该脚本的两个版本。第一个(如本文所述)使用 Exchange Online PowerShell;第二个混合使用 PowerShell 和 Graph API 请求。请随意改进其中的代码并使脚本满足您的要求。关键是 PowerShell 代码非常适合不同的目的,这也是它应该的样子。

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

取消回复欢迎 发表评论:

关灯