Tìm kiếm trang web

Liệt kê và xóa các sự kiện lịch khỏi hộp thư Exchange bằng PowerShell


PowerShell cho phép bạn truy cập các mục sự kiện và cuộc họp trong lịch của người dùng Exchange. Trong bài đăng này, chúng tôi sẽ xem xét cách lấy danh sách các sự kiện lịch hoặc xóa một sự kiện/cuộc hẹn cụ thể khỏi lịch của tất cả người dùng trên Exchange Server hoặc tổ chức Microsoft 365.

Cách liệt kê và đọc các sự kiện lịch của người dùng trong Exchange Online (Microsoft 365)

Trước tiên, hãy xem cách lấy danh sách các sự kiện lịch trong hộp thư của người dùng Exchange Online (Microsoft 365). API Microsoft Graph có thể truy xuất thông tin về các mục trong lịch của người dùng. Bắt đầu bằng cách đăng ký một ứng dụng mới trong Azure (ID Microsoft Entra -> Đăng ký ứng dụng -> Đăng ký mới) và cấp cho ứng dụng đó các quyền sau của Microsoft Graph:

Calendars.Read

Và

Calendars.ReadBasic.All

Để biết thêm chi tiết về cách đăng ký ứng dụng trong Azure và cấp quyền cho Microsoft Graph, hãy xem bài đăng Cách kết nối với Microsoft Graph bằng PowerShell.

Bây giờ bạn có thể sử dụng mô-đun Microsoft.Graph để kết nối với đối tượng thuê Microsoft 365. Trong ví dụ này, chúng tôi sẽ sử dụng xác thực Azure dựa trên chứng chỉ trong PowerShell.

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

Nếu thiếu mô-đun Microsoft.Graph, hãy cài đặt nó:

Install-Module Microsoft.Graph -Scope AllUsers

Để xem các sự kiện trong lịch của một người dùng cụ thể trong tháng hiện tại:

$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

Lệnh trả về chủ đề sự kiện, nội dung của chúng (xem trước nội dung) và thời gian bắt đầu/kết thúc của chúng.

Xóa sự kiện khỏi lịch Exchange bằng PowerShell

Sử dụng lệnh ghép ngắn Remove-CalendarEvents để hủy (xóa) một sự kiện (cuộc hẹn, cuộc họp) trong lịch Exchange. Nó hoạt động cho cả tổ chức Exchange Online và Exchange Server 2019.

Mở bảng điều khiển PowerShell và kết nối với đối tượng thuê Exchange Online của bạn (sử dụng mô-đun Exchange Online PowerShell) hoặc máy chủ Exchange Server.

Xóa tất cả các sự kiện sắp tới (trong vòng 15 ngày tới) khỏi lịch của người dùng mà họ là người tổ chức:

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

Hoặc, bạn có thể xóa tất cả các sự kiện bắt đầu từ một ngày cụ thể:

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

Bạn có thể dùng

-PreviewOnly -Verbose

tùy chọn để xem danh sách các sự kiện như vậy mà không xóa chúng.

Nhược điểm chính của lệnh ghép ngắn Remove-CalendarEvents là nó chỉ có thể xóa các sự kiện lịch sắp tới và không cho phép bạn chọn các sự kiện theo chủ đề, người tổ chức, nội dung hoặc bất kỳ thuộc tính nào khác. Cách sử dụng phổ biến nhất của Remove-CalendarEvents là xóa nhanh lịch các sự kiện của người dùng được tạo bởi một nhân viên đã bị sa thải, nghỉ ốm hoặc đã đi nghỉ.

Nếu bạn cần xóa các sự kiện trong quá khứ hoặc nếu bạn đang sử dụng Exchange Server 2016/2013/2010 tại chỗ, bạn có thể sử dụng lệnh ghép ngắn Search-Mailbox hoặc New-ComplianceSearch để tìm kiếm và xóa các mục trong hộp thư Exchange.

Ví dụ: trên Exchange Server, bạn có thể tìm thấy các sự kiện lịch có chủ đề cụ thể như sau:

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

Lệnh này tìm kiếm một sự kiện trong hộp thư của người dùng và lưu kết quả vào thư mục SearchMailboxResult của hộp thư report_mbx.

Trong trường hợp bạn muốn xóa sự kiện được tìm thấy, hãy thay thế tham số cuối cùng bằng -DeleteContent. Dưới đây là cách xóa tất cả các sự kiện trong lịch của người dùng:

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

Trong Exchange Online, lệnh ghép ngắn SearchMailbox không được dùng nữa và thay vào đó bạn phải sử dụng lệnh ghép ngắn ComplianceSearch. Ví dụ: để tìm tất cả các sự kiện có chủ đề cụ thể trong tất cả các hộp thư, hãy chạy lệnh:

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

Sau khi hoàn thành nhiệm vụ (

Status=Completed

), bạn có thể xóa các sự kiện nó đã tìm thấy:

New-ComplianceSearchAction -SearchName DeleteITMeeting -Purge

Bài viết liên quan