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

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

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

如何使用 Powershell 和 Graph API 读取用户日历事件


[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

许多组织发现围绕用户日历实施某种自动化很有帮助。

目的可能是跟踪生产力、更新通知板、查看趋势等。

使用 Microsoft Graph PowerShell,访问用户日历非常容易 - 如果您知道如何操作的话 ?

这是分步指南:

编写 Office 365 日历脚本:分步指南

要启用对组织中所有日历的编程访问,您需要实施以下操作:

  1. 生成用于 OAuth2 身份验证的证书
  2. 设置客户端应用程序
  3. 为应用程序分配 API 权限
  4. 在应用程序上设置证书身份

1. 生成用于Oauth2认证的证书

使用 PowerShell,您可以快速生成自签名证书,该证书非常适合应用程序身份验证。

您需要证书中的两个文件:

  • .pfx 文件 - 包含私钥,并安全地存储在调度服务器上您的调度帐户的个人证书存储中。
  • .cer 文件 - 仅包含公钥并上传到 Azure 应用程序,以允许您使用相应的(秘密)私钥进行身份验证。

使用以下代码生成新证书并导出 .pfx 和 .cer 文件:

# Create certificate with expiry of 5 years
$mycert = New-SelfSignedCertificate -DnsName "easy365manager.com" -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(5) -KeySpec KeyExchange
# Export certificate to .pfx file
$mycert | Export-PfxCertificate -FilePath C:\tmp\ExoAutomateCert.pfx -Password $(ConvertTo-SecureString -String "$omeP@ssw0rd" -AsPlainText -Force)
# Export certificate to .cer file
$mycert | Export-Certificate -FilePath C:\tmp\ExoAutomateCert.cer

该证书是在运行代码的用户的个人证书存储中创建的。

如果您计划使用登录系统上的登录帐户自动执行脚本,则不需要 .pfx 文件(备份除外)。

要在其他系统/用户帐户上使用证书,您必须以交互方式登录并从 .pfx 文件导入证书。

.cer 文件将用于在后续步骤中在 Azure 应用程序上设置身份验证。

2. 设置客户端应用程序

您必须登录 Azure 门户才能设置新的 Azure 应用程序。然后,选择 Azure Active Directory,单击应用程序注册,或点击此直接链接。

从那里,您可以通过单击“新注册”来创建新的应用程序注册:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

完成申请注册:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

新的 Azure 应用程序现已创建:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

注意应用程序(客户端)ID。这是我们在使用 PowerShell 连接到 Exchange Online 时将用作 -AppId 参数的内容。

3. 为应用程序分配API权限

我们将使用 Graph API 来访问用户日历。这比 Exchange Web 服务 (EWS) 等旧方法更容易使用。

选择API权限,单击添加权限,然后选择Microsoft Graph:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

选择应用程序权限:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

然后向下滚动以查找日历权限。如果您只想查看/导出信息,请选择日历。阅读:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

我们现在拥有访问日历信息所需的权限。如果您还希望脚本提取用户信息,您可以添加以下权限:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

单击“添加权限”以提交新的 API 权限。

然后授予管理员对新权限的同意:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

权限的状态将更改为“已授予”,新的客户端应用程序现已设置完毕。

我们只需要授予访问权限即可使用它。

4. 在应用程序上设置证书身份

要使用步骤 1 中生成的证书启用身份验证,我们需要执行以下步骤:

单击“证书和机密”,单击“证书”,单击“上传证书”,浏览到步骤 1 中的 .cer 文件,添加说明,然后单击“添加”:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

现在,您将在列表中看到证书,包括我们将在脚本中用作参数的指纹:

[玩转系统] 如何使用 Powershell 和 Graph API 读取用户日历事件

使用 Microsoft Graph PowerShell 读取日历信息

我们准备好摇滚了!

使用 Microsoft Graph PowerShell 模块访问用户日历。

使用以下命令连接到带有证书的新客户端应用程序:

PS C:\> Connect-MgGraph -TenantId "8a35f394-855d-4d13-9f6f-86d8eb24dc6b" -ClientId "23b3f624-502d-42fb-83ac-ea9f6aff9e5b" -CertificateThumbprint "08451D7079F093EBB2A2CB0266C885ECA098DD9E"
Welcome To Microsoft Graph!

要提取日历信息,请使用 Get-MgUserCalendarView CmdLet。

以下示例列出了用户 Hans C. Ørsted 今天的所有日历条目(仅显示一个条目):

PS C:\> $StartDate = Get-Date -Date 00:00:00
PS C:\> $EndDate = Get-Date -Date 23:59:59
PS C:\> Get-MgUserCalendarView -UserId [email protected] -CalendarId "Calendar" -StartDateTime $StartDate -EndDateTime $EndDate | fl


AllowNewTimeProposals         : True
Attachments                   :
Attendees                     : {Microsoft.Graph.PowerShell.Models.MicrosoftGraphAttendee, Microsoft.Graph.PowerShell.Models.MicrosoftGraphAttendee, Microsoft.Graph.PowerShell.Models.MicrosoftGraphAttendee}
Body                          : Microsoft.Graph.PowerShell.Models.MicrosoftGraphItemBody
BodyPreview                   : Do some more testing on electro magnetism.
Calendar                      : Microsoft.Graph.PowerShell.Models.MicrosoftGraphCalendar
Categories                    : {}
ChangeKey                     : xa95c+RziUeacUESMPKGkwAAGGtkxw==
CreatedDateTime               : 11/8/2022 7:19:51 AM
End                           : Microsoft.Graph.PowerShell.Models.MicrosoftGraphDateTimeZone
Extensions                    :
HasAttachments                : False
HideAttendees                 : False
ICalUId                       : 040000008200E00074C5B7101A82E00800000000000135B14AF3D801000000000000000010000000D7E511407918FD4F9318BD4EEDFB3229
Id                            : AAMkAGY5MjM3MjVmLTcxMzQtNDEwNC1iNDQwLTU1NjNhOGRmYzM5ZABGAAAAAAAHk64FGa4vQJkMsperiKxZBwDFr3lz5HOJR5pxQRIw8oaTAAAAAAENAADFr3lz5HOJR5pxQRIw8oaTAAAYa3q5AAA=
Importance                    : normal
Instances                     :
IsAllDay                      : False
IsCancelled                   : False
IsDraft                       : False
IsOnlineMeeting               : False
IsOrganizer                   : True
IsReminderOn                  : True
LastModifiedDateTime          : 11/8/2022 7:21:52 AM
Location                      : Microsoft.Graph.PowerShell.Models.MicrosoftGraphLocation
Locations                     : {Science room 23}
MultiValueExtendedProperties  :
OnlineMeeting                 : Microsoft.Graph.PowerShell.Models.MicrosoftGraphOnlineMeetingInfo
OnlineMeetingProvider         : unknown
OnlineMeetingUrl              :
Organizer                     : Microsoft.Graph.PowerShell.Models.MicrosoftGraphRecipient
OriginalEndTimeZone           : Romance Standard Time
OriginalStart                 :
OriginalStartTimeZone         : Romance Standard Time
Recurrence                    : Microsoft.Graph.PowerShell.Models.MicrosoftGraphPatternedRecurrence
ReminderMinutesBeforeStart    : 15
ResponseRequested             : True
ResponseStatus                : Microsoft.Graph.PowerShell.Models.MicrosoftGraphResponseStatus
Sensitivity                   : normal
SeriesMasterId                :
ShowAs                        : busy
SingleValueExtendedProperties :
Start                         : Microsoft.Graph.PowerShell.Models.MicrosoftGraphDateTimeZone
Subject                       : Meeting with assistant
TransactionId                 :
Type                          : singleInstance
WebLink                       : https://outlook.office365.com/owa/?itemid=AAMkAGY5MjM3MjVmLTcxMzQtNDEwNC1iNDQwLTU1NjNhOGRmYzM5ZABGAAAAAAAHk64FGa4vQJkMsperiKxZBwDFr3lz5HOJR5pxQRIw8oaTAAAAAAENAADFr3lz5HOJR5pxQRIw8oaTAAAYa3q5AAA%3D&exvsurl=1&path=/calendar/item
AdditionalProperties          : {[@odata.etag, W/"xa95c+RziUeacUESMPKGkwAAGGtkxw=="]}

除了大量技术信息之外,您还将在上面的输出中看到有用的属性:

  • 开始
  • 结尾
  • 主题
  • 身体预览
  • 出席者
  • 地点

和更多。

享受创建带有日历集成的应用程序和脚本的乐趣!

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

取消回复欢迎 发表评论:

关灯