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

[玩转系统] Microsoft Graph PowerShell SDK 简介第 III 部分:与 Exchange Online 和 SharePoint Online 交互

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

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 属性中。

[玩转系统] Microsoft Graph PowerShell SDK 简介第 III 部分:与 Exchange Online 和 SharePoint Online 交互

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 和图表创建邮箱内容报告的文章。

[玩转系统] Microsoft Graph PowerShell SDK 简介第 III 部分:与 Exchange Online 和 SharePoint Online 交互

项目以 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,并将邮件移入其中。

[玩转系统] Microsoft Graph PowerShell SDK 简介第 III 部分:与 Exchange Online 和 SharePoint Online 交互

在测试之外,修改现有邮件项目的用例非常有限。更实用的是能够直接从 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 请求。

[玩转系统] Microsoft Graph PowerShell SDK 简介第 III 部分:与 Exchange Online 和 SharePoint Online 交互

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

[玩转系统] Microsoft Graph PowerShell SDK 简介第 III 部分:与 Exchange Online 和 SharePoint Online 交互

这个细微差别(或功能,很难从文档中说出来)相对较小,但它确实开始显示出 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 攻击并从中恢复。

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

取消回复欢迎 发表评论:

关灯