Как получить список или удалить событие в календаре Exchange из PowerShell?

С помощью PowerShell вы можете получить доступ к событиям в календарях ящиков пользователей Exchange. В этой статье мы рассмотрим, как получить список событий в календаре или удалить определенное событие/встречу в календаре всех пользователей организации Exchange Server или Microsoft 365.

Просмотр событий в календаре ящика Exchange Online (Microsoft 365)

Рассмотрим, как получить список событий в ящике пользователя Exchange Online (Microsoft 365). Информацию о событиях в календаре пользователя можно получить через Microsoft Graph API. Зарегистрируйте новое приложение в Azure ( Azure Active Directory -> App registration -> New registration ) и предоставьте ему разрешения Microsoft Graph -> Calendars.Read и Calendars.ReadBasic.All .

права Microsoft Graph для доступа к календарям в ящиках exchange

Подробнее о регистрации приложений в Azure и назначение прав Microsoft Graph рассказано в статье Доступ к Azure через Microsoft Graph API с помощью PowerShell .

Теперь можно использовать модуль Microsoft.Graph для подключения к тенанту. В этом примере я использую аутентификацию в Azure из PowerShell с помощью сертификата :

$certThumbprint = "7E82C3A560737C7894562593926E495777ECDB75"
$AzureAppID = "123456-1234-1234-1234-123456789"
$tenant="remontka.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).AddDays(-$(Get-Date).Day)
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

powershell - вывести список событий в календаре exchange

Команда вернула темы событий, их содержимое (bodypreview) и их время начала/конца.

Удалить событие в календаре Exchange с помощью PowerShell

Для отмены (удаления) события в календарях Exchange используется командлет Remove-CalendarEvents . Его можно использовать для организаций Exchange Online и Exchange Server 2019.

Откройте консоль PowerShell и подключитесь к своему тенанту Exchange Online ( модуль Exchange Online PowerShell, EXO ) или хосту Exchange Server ( удаленное подключение к Exchange Server без установки EMS ). Чтобы удалить все предстоящие события (в течении следующих 15 дней) из календаря пользователя, где он является организатором, выполните:

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

Можно удалить все события с определенной даты:

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

С помощью опций -PreviewOnly –Verbose можно вывести список таких событий, не удалая их из ящика.

Основной недостаток командлета Remove-CalendarEvents — он позволяет удалить только предстоящие события в календаре и не позволяет выбрать события по теме, организатору, содержимому или любому другому свойству. Чаще всего команда Remove-CalendarEvents используется для быстрой очистки календарей пользователи от событий, которые создал уволившийся/заболевший или ушедший в отпуск сотрудник.

Если вам нужно удалить прошедшие события, или у вас используется старые версии on-premises Exchange Server (2016/2013/2010), вы можете воспользоваться возможностями поиска и удаления элементов в ящиках Exchange с помощью командлета Search-Mailbox или New-ComplianceSearch .

Например, для Exchange Server можно найти события в календаре по определенной теме так:

Search-Mailbox -Identity [email protected] -SearchQuery {Subject:"Discuss: AD Schema Update" AND Kind:meetings AND Received:07/07/2022..26/07/2022} -TargetMailbox report_mbx -TargetFolder SearchMailboxResult –LogOnly -LogLevel Full

Такая команда выполнит поиск события в ящике пользователя и сохранит результаты в папку SearchMailboxResult ящика report_mbx.

Если вам нужно удалить найденное событие, замените последние параметры на –DeleteContent . Например, чтобы удалить все события в календаре пользователя:

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

В Exchange Online командлет SearchMailbox считается устаревшим и вместо него нужно использовать командлеты ComplianceSearch. Например, чтобы найти во всех ящика все события с определенной темой, выполните команды:

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

EnglishRussianUkrainian