使用 PowerShell 列出和刪除 Exchange 郵箱中的日曆事件
PowerShell 允許您訪問 Exchange 用戶日曆中的事件和會議項目。在這篇文章中,我們將了解如何獲取日曆事件列表或從 Exchange Server 或 Microsoft 365 組織上的所有用戶的日曆中刪除特定事件/約會。
內容:
如何在 Exchange Online (Microsoft 365) 中列出和讀取用戶日曆事件
首先,我們來看看如何獲取 Exchange Online (Microsoft 365) 用戶郵箱中的日曆事件列表。 Microsoft Graph API 可以檢索有關用戶日曆中的項目的信息。首先在 Azure 中註冊一個新應用程序(微軟Entra ID->應用註冊->新註冊) 並授予其以下 Microsoft Graph 權限:Calendars.Read和Calendars.ReadBasic.All。

有關在 Azure 中註冊應用程序和授予 Microsoft Graph 權限的更多詳細信息,請查看文章如何使用 PowerShell 連接到 Microsoft Graph。
現在您可以使用微軟Graph連接到 Microsoft 365 租戶的模塊。在此示例中,我們將在 PowerShell 中使用基於證書的 Azure 身份驗證。
$certThumbprint = "9CF05589A4B29BECEE6456F08A76EBC3DC2BC581"
$AzureAppID = "111111-2222-3333-4444-12345678"
$tenant="woshub.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 protected] -CalendarId "Calendar" -StartDateTime $StartDate -EndDateTime $EndDate | Select-Object -Property @{Name="EventStart";Expression={ $_.Start.DateTime}},@{Name="EventEnd";Expression={ $_.End.DateTime}},Subject, BodyPreview


該命令返回事件主題、其內容(正文預覽)及其開始/結束時間。
使用刪除日曆事件用於取消(刪除)Exchange 日曆中的事件(約會、會議)的 cmdlet。它適用於 Exchange Online 和 Exchange Server 2019 組織。
打開 PowerShell 控制台並連接到 Exchange Online 租戶(使用 Exchange Online PowerShell 模塊)或 Exchange Server 主機。
從用戶的日曆中刪除所有即將舉辦的活動(未來 15 天內)(由他們組織者):
Remove-CalendarEvents -Identity [email protected] -CancelOrganizedMeetings -QueryWindowInDays 15
另請閱讀:在 Exchange Server/Microsoft 365 上配置郵箱的電子郵件轉發
或者,您可以刪除從特定日期開始的所有事件:
Remove-CalendarEvents -Identity [email protected] -CancelOrganizedMeetings -QueryStartDate 04-10-2023 -QueryWindowInDays 60
您可以使用-PreviewOnly -Verbose查看此類事件列表而不刪除它們的選項。
Remove-CalendarEvents cmdlet 的主要缺點是它只能刪除即將發生的日曆事件,並且不允許您按主題、組織者、內容或任何其他屬性選擇事件。 Remove-CalendarEvents 最常見的用途是快速清除用戶日曆中由已被解僱、請病假或休假的員工創建的事件。
如果您需要刪除過去的事件,或者如果您使用的是本地 Exchange Server 2016/2013/2010,則可以使用搜索郵箱或者新合規搜索用於搜索和刪除 Exchange 郵箱中的項目的 cmdlet。
例如,在 Exchange Server 上,您可以查找具有特定主題的日曆事件,如下所示:
Search-Mailbox -Identity [email protected] -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
此命令在用戶郵箱中搜索事件並將結果保存在用戶郵箱的 SearchMailboxResult 文件夾中報告_mbx郵箱。
如果您想刪除找到的事件,請將最後一個參數替換為-刪除內容。以下是刪除用戶日曆中所有事件的方法:
SearchMailbox -identity [email protected] -SearchQuery kind:meetings -DeleteContent
在 Exchange Online 中,SearchMailbox cmdlet 已被棄用,您必須使用合規搜索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
