С помощью 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 для подключения к тенанту. В этом примере я использую аутентификацию в Azure из PowerShell с помощью сертификата:
$certThumbprint = "7E82C3A560737C7894562593926E495777ECDB75"
$AzureAppID = "123456-1234-1234-1234-123456789"
$tenant="winitpro.onmicrosoft.com"
Connect-MgGraph -AppId $AzureAppID -CertificateThumbprint $certThumbprint -TenantId $tenant
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
Команда вернула темы событий, их содержимое (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