网站搜索

Microsoft Graph PowerShell SDK 简介第 III 部分:与 Exchange Online 和 SharePoint Online 交互


超越简单的管理任务

在本系列的第二部分中,我了解了 Microsoft Graph 和 Graph PowerShell SDK 如何允许管理员从单个模块管理 Microsoft 365 的多个方面。凭借一些 PowerShell 经验,该 SDK 使标准管理任务和报告变得相对容易。

虽然在一个地方拥有此功能很好,但通过 PowerShell 管理 Microsoft 365 对于大多数管理员来说已经是老新闻了。 Graph SDK 相对于其他方法的优势在于,它可以充分利用 Graph API,允许管理员与 Exchange Online 和 SharePoint Online 等 Microsoft 365 服务进行交互,而这些服务以前需要使用专用 API,而这些 API 可能需要大量的资源。投入更多的时间来学习。

再见EWS

自 Exchange Server 2007 以来,Exchange Web 服务 (EWS) 一直是 Microsoft Exchange 的组成部分。EWS 支持以编程方式访问邮箱等 Exchange 资源。 2018 年,Exchange 团队宣布他们将不再积极投资 Exchange Online 的 EWS,并建议应用程序所有者和供应商迁移到 Microsoft Graph。随后,2021 年 API 贬值,这表明 EWS 的终结即将到来。

与邮件交互

常见的 EWS 任务是检索和处理邮箱中的邮件。 Microsoft Graph PowerShell SDK 通过各种与消息相关的 cmdlet 使此过程变得简单。例如,以下命令检索用户邮箱中的所有项目。

注意:使用委派权限(如本系列第一部分中详述)仅允许您检索您的帐户有权访问的项目,例如您自己的邮箱。要访问您无权访问的其他邮箱和资源,必须使用应用程序权限。默认情况下,SDK 将始终使用委托权限,要了解有关使用应用程序权限的更多信息,请查看本系列的第一部分。

Get-MgUserMessage -UserId <UserID> -All

从邮箱返回所有项目是一个很好的测试,但在构建代码来完成任务时不太实用。有多种方法可以过滤结果,以缩短 cmdlet 的执行时间并仅返回相关对象。首先,我们可以只返回特定文件夹中的项目。 Get-MgUserMailFolder cmdlet 返回邮箱中的顶级文件夹,Get-MgUserMailFolderChildFolder cmdlet 返回文件夹的子文件夹。在图 1 中,我们找到“收件箱”文件夹的唯一 ID,并使用它来获取“要处理的邮件”子文件夹的 ID。每个邮件项目和文件夹都有一个由 Exchange Online 分配的唯一 ID,该 ID 存储在项目的 ID 属性中。

cmdlet Get-MgUserMailFolderMessage 返回指定文件夹中包含的邮件项目。然后可以使用以下语法过滤或搜索这些结果以进一步缩小范围。

##Return all messages in a particular folder
Get-MgUserMailFolderMessage -MailFolderId AAMkAGI4NjhmMDBjLTcyNTEtNDZkYy1hMmNhLTZjMThjYjQxODIzZgAuAAAAAAAdY2Aq0HOqRqKvhWSGlIAmAQDcQ9TSiMrlRrOhGqycky_7AABCa1F8AAA= -UserId ffcf3b2c-83d0-4e5f-a432-6d6a740a99d1 -All | fl subject,id
##Search messages in a particular folder for the word “PIM”
Get-MgUserMailFolderMessage -MailFolderId AAMkAGI4NjhmMDBjLTcyNTEtNDZkYy1hMmNhLTZjMThjYjQxODIzZgAuAAAAAAAdY2Aq0HOqRqKvhWSGlIAmAQDcQ9TSiMrlRrOhGqycky_7AABCa1F8AAA= -UserId ffcf3b2c-83d0-4e5f-a432-6d6a740a99d1 -All -Search "PIM" | fl subject,id,ReceivedDateTime
##Filter messages in a particular folder by receivedDateTime and by subject starting with “Your weekly PIM digest'”
Get-MgUserMailFolderMessage -MailFolderId AAMkAGI4NjhmMDBjLTcyNTEtNDZkYy1hMmNhLTZjMThjYjQxODIzZgAuAAAAAAAdY2Aq0HOqRqKvhWSGlIAmAQDcQ9TSiMrlRrOhGqycky_7AABCa1F8AAA= -UserId ffcf3b2c-83d0-4e5f-a432-6d6a740a99d1 -All -Filter "(receivedDateTime gt 2022-10-01T00:00:00Z) and (startswith(Subject,'Your weekly PIM digest'))" | fl subject,id,ReceivedDateTime

如图 2 所示,将过滤器和搜索与 Get-MgUserMailFolderMessage 之类的 cmdlet 相结合,可以缩小结果范围,并允许我们准确检索所需内容。

了解更多信息:要了解有关使用 Graph SDK 评估邮箱项目的更多信息,请查看这篇关于使用 PowerShell 和图表创建邮箱内容报告的文章。

项目以 JSON 格式返回,邮件项目作为消息资源类型返回。资源类型是特定对象的预定义格式(JSON 格式),消息资源类型对象的架构在图文档中详细介绍。

Graph SDK 还支持使用 Update-MgUserMessage cmdlet 修改现有邮件项目。在下面显示的代码中,我们更新用消息标识符标识的消息主题:

##Modify the subject of a message
Update-MgUserMessage -MessageId AAMkAGI4NjhmMDBjLTcyNTEtNDZkYy1hMmNhLTZjMThjYjQxODIzZgBGAAAAAAAdY2Aq0HOqRqKvhWSGlIAmBwDcQ9TSiMrlRrOhGqycky_7AABCa1F8AADcQ9TSiMrlRrOhGqycky_7AABCa4w1AAA= -UserId ffcf3b2c-83d0-4e5f-a432-6d6a740a99d1 -Subject "Updated message subject"

cmdlet Move-MgUserMessage 会将邮件移动到目标文件夹中。在图 3 中,我们获取现有邮件项目的 ID,获取 Inbox 文件夹的 ID,并将邮件移入其中。

在测试之外,修改现有邮件项目的用例非常有限。更实用的是能够直接从 PowerShell 发送电子邮件。本文介绍如何使用适用于 PowerShell 的 Microsoft Graph SDK 发送 Exchange Online 电子邮件,展示如何使用 Graph SDK 直接从 PowerShell 发送邮件。

使用 SharePoint Online

文件和站点管理及报告是 Microsoft Graph 的另一个主要优势。通过 PowerShell 与 SharePoint Online(以及扩展的 Teams 和 OneDrive)中的文件和网站进行交互以前需要了解 SharePoint PnP PowerShell 模块或 SharePoint 客户端对象模型 (CSOM),如果您没有经验,这两种方法都不是特别直观在 SharePoint 开发中。

Microsoft Graph 公开了与 SharePoint Online 交互的端点,虽然它不具备 PnP 或 CSOM 的深度(例如创建网站模板),但完全支持租户管理员需要执行的大多数任务。

这篇关于如何使用图表 API 在 SharePoint Online 网站中创建文件报告的文章是图表如何帮助 SharePoint Online 管理员的一个示例。本文中的代码首先获取附加到特定站点的驱动器(文档库)列表,并过滤“文档”库。从这里它展开根目录下的文件和文件夹以创建有用的报告。

此脚本使用 PowerShell SDK 中的 Invoke-MgGraphRequest cmdlet 来查询Drives 端点并返回所有库。 Invoke-MgGraphRequest 是针对您知道的端点或没有本机 PowerShell SDK cmdlet 的端点运行查询的好方法。

使用 Get-MgSiteDrive cmdlet 可以获得相同的结果,但是该 cmdlet 存在一些细微差别。例如,只需针对特定站点运行 Get-MgSiteDrive 将查询站点的 /drive 端点。 /drive 端点仅返回站点的默认文档库。如图 4 所示,使用 SDK 的调试功能,如本文中讨论的使用 Microsoft Graph PowerShell SDK Cmdlet 的 Debug 参数来公开 Graph API 请求。

要返回附加到网站的所有云端硬盘,我们需要添加 -All 参数。此参数将查询的端点从 /drive 更改为 /drives。 URI 中的这种微妙变化(在排除脚本无法按预期工作的原因时很难发现)将结果集从默认库更改为所有库。图 5 显示了带有 -All 参数的 URI。

这个细微差别(或功能,很难从文档中说出来)相对较小,但它确实开始显示出 PowerShell SDK 的一些粗糙边缘。 SDK 仍然是一项正在进行中的工作,毫无疑问,随着时间的推移,它会随着文档的改进和 cmdlet 直接支持的更多端点而成熟。在此之前,总会有 Invoke-MgGraphRequest cmdlet 来填补空白。

另一个示例是列出驱动器中的文件。 Get-MgDriveItem cmdlet 似乎应该执行此处所需的操作,但是,此 cmdlet 使用 /drive/driveid/items 端点,该端点用于返回特定项目,不列出所有项目。在脚本中,URI https://graph.microsoft.com/v1.0/sites/$ ($Site.Id)/drives/$ ($DocumentLibrary.Id)/root/children 与Invoke-MgGraphRequest cmdlet 就可以完美地完成工作。

概括

Graph PowerShell SDK 是一个出色的工具,管理员可以通过以前不投入大量时间的方式与 Microsoft 365 工作负载进行交互。 SDK 为开始使用 Microsoft Graph 提供了多种可能性,但仍有一些领域需要改进。

虽然它不能替代学习用于创建复杂解决方案的 Graph API 的复杂性,但 SDK 是一种入门和执行标准任务的绝佳方式,无需投入太多时间。

Active Directory 的网络安全风险管理

了解如何通过这些网络安全风险管理解决方案预防 AD 攻击并从中恢复。

相关文章