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

[玩转系统] 使用 PowerShell 列出和删除 Exchange 邮箱中的日历事件

作者:精品下载站 日期:2024-12-14 06:36:38 浏览:16 分类:玩电脑

使用 PowerShell 列出和删除 Exchange 邮箱中的日历事件


PowerShell 允许您访问 Exchange 用户日历中的事件和会议项目。在这篇文章中,我们将了解如何获取日历事件列表或从 Exchange Server 或 Microsoft 365 组织上的所有用户的日历中删除特定事件/约会。

如何在 Exchange Online (Microsoft 365) 中列出和读取用户日历事件

首先,我们来看看如何获取 Exchange Online (Microsoft 365) 用户邮箱中的日历事件列表。 Microsoft Graph API 可以检索有关用户日历中的项目的信息。首先在 Azure 中注册一个新应用程序(Microsoft Entra ID -> 应用注册 -> 新注册)并为其授予以下 Microsoft Graph 权限:

Calendars.Read

Calendars.ReadBasic.All

[玩转系统] 使用 PowerShell 列出和删除 Exchange 邮箱中的日历事件

有关在 Azure 中注册应用程序和授予 Microsoft Graph 权限的更多详细信息,请查看文章如何使用 PowerShell 连接到 Microsoft Graph。

现在,您可以使用 Microsoft.Graph 模块连接到 Microsoft 365 租户。在此示例中,我们将在 PowerShell 中使用基于证书的 Azure 身份验证。

$certThumbprint = "9CF05589A4B29BECEE6456F08A76EBC3DC2BC581"
$AzureAppID = "111111-2222-3333-4444-12345678"
$tenant="a-d.onmicrosoft.com"
Connect-MgGraph -AppId $AzureAppID -CertificateThumbprint $certThumbprint -TenantId $tenant

如果缺少 Microsoft.Graph 模块,请安装它:

Install-Module Microsoft.Graph -Scope AllUsers

要查看特定用户当月日历中的事件:

$StartDate = (Get-Date -Day 1)
$EndDate = (Get-Date -Day 1).Addmonths(1)
Get-MgUserCalendarView -UserId [email  -CalendarId "Calendar" -StartDateTime $StartDate -EndDateTime $EndDate | Select-Object -Property @{Name='EventStart';Expression={ $_.Start.DateTime}},@{Name='EventEnd';Expression={ $_.End.DateTime}},Subject, BodyPreview

[玩转系统] 使用 PowerShell 列出和删除 Exchange 邮箱中的日历事件

该命令返回事件主题、其内容(正文预览)及其开始/结束时间。

使用 PowerShell 从 Exchange 日历中删除事件

使用Remove-CalendarEvents cmdlet 取消(删除)Exchange 日历中的事件(约会、会议)。它适用于 Exchange Online 和 Exchange Server 2019 组织。

打开 PowerShell 控制台并连接到 Exchange Online 租户(使用 Exchange Online PowerShell 模块)或 Exchange Server 主机。

从用户的日历中删除所有即将举办的活动(未来 15 天内)(由他们组织者):

Remove-CalendarEvents -Identity [email  -CancelOrganizedMeetings -QueryWindowInDays 15

或者,您可以删除从特定日期开始的所有事件:

Remove-CalendarEvents -Identity [email  -CancelOrganizedMeetings -QueryStartDate 04-10-2023 -QueryWindowInDays 60

您可以使用

-PreviewOnly -Verbose

查看此类事件列表而不删除它们的选项。

Remove-CalendarEvents cmdlet 的主要缺点是它只能删除即将发生的日历事件,并且不允许您按主题、组织者、内容或任何其他属性选择事件。 Remove-CalendarEvents 最常见的用途是快速清除用户日历中由已被解雇、请病假或休假的员工创建的事件。

如果您需要删除过去的事件,或者如果您使用的是本地 Exchange Server 2016/2013/2010,则可以使用 Search-MailboxNew-ComplianceSearch cmdlet搜索和删除 Exchange 邮箱中的项目。

例如,在 Exchange Server 上,您可以查找具有特定主题的日历事件,如下所示:

Search-Mailbox -Identity [email  -SearchQuery {Subject:"Discuss: AD Schema Update" AND Kind:meetings AND Received:01/12/2023..15/01/2024} -TargetMailbox report_mbx -TargetFolder SearchMailboxResult -LogOnly -LogLevel Full

此命令在用户邮箱中搜索事件,并将结果保存在 report_mbx 邮箱的 SearchMailboxResult 文件夹中。

如果您想删除找到的事件,请将最后一个参数替换为 -DeleteContent。以下是删除用户日历中所有事件的方法:

SearchMailbox -identity [email  -SearchQuery kind:meetings -DeleteContent

在 Exchange Online 中,SearchMailbox cmdlet 已弃用,您必须使用 ComplianceSearch cmdlet。例如,要查找所有邮箱中具有特定主题的所有事件,请运行以下命令:

New-ComplianceSearch -Name DeleteITMeeting -ContentMatchQuery "kind:meetings AND subject:weekly_it_meeting" -ExchangeLocation all
Start-ComplianceSearch -identity DeleteITMeeting
Get-ComplianceSearc -identity DeleteITMeeting | fl

任务完成后(

Status=Completed

),您可以删除它找到的事件:

New-ComplianceSearchAction -SearchName DeleteITMeeting -Purge

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

取消回复欢迎 发表评论:

关灯