В этой статье мы рассмотрим, как управлять правами общего доступа к календарям пользователей в ящиках on-prem Exchange Server и Microsoft 365 через Outlook и PowerShell. Отдельно остановимся на теме просмотра доступности (free/busy) в календарях ящиков комнат или пользователей.
Довольно часто почтовому администратору нужно предоставить права доступа к календарю другого сотрудника. Например, секретарь хочет создавать, удалять и редактировать любые записи в календаре руководителя и служебном ящике переговорной комнаты, или руководитель отдела хочет видеть и иметь возможно редактировать занятость сотрудников отдела в их календарях.
Настройка общего доступа к календарю из Outlook/OWA
Пользователь может самостоятельно прямо из Outlook предоставить доступ к своему календарю. Календарь Exchange – это по сути обычная папка в ящике пользователя. Можно настроить доступ к календарю через десктопную версию Outlook или через Outlook Web Access.
Выберите нужный календарь и в его настройках нажмите Sharing and permissions.
В открывшемся окне появится текущий список пользователей и групп, которым дан доступ к вашему календарю. В нашем примере любой пользователь вашей организации (тенанта) может просматривать информацию о доступности Free/Busy в календаре (
Can view when I’m busy
). Для пользователя Henrietta предоставлены права на создание и редактирование любых событий в календаре.
Пользователь может самостоятельно отправить другому пользователю приглашение о предоставлении общего доступа к своему календарю. Нужно указать email пользователя и уровень разрешений. В этом примере я предоставлю права на Alex право на просмотр событий в моем календаре (Can view all details).
В десктопных версиях Outlook права на календарь назначаются похожим образом. Перейдите в календарь Outlook, нажмите кнопку Разрешения для календаря. В открывшемся окне появится текущий список доступа к календарю. С помощью кнопок Добавить/Удалить вы можете изменить права доступа.
Назначить права доступа к календарю в ящике Exchange/Microsoft 365 через PowerShell
Администратор организации/тенанта может предоставить доступ к календарю любого пользователя или общего почтового ящика с помощью PowerShell или Microsoft Graph API (для Microsoft 365/Azure). Кроме того, только с помощью PowerShell можно быстро предоставить права доступа на календари всех пользователей организации.
Подключитесь к своему on-prem Exchange Server или к тенанту Microsoft 365 (Exchange Online):
- Из консоли PowerShell можно удаленно подключиться к on-prem Exchange Server с любого компьютера без установки модуля EMS (Exchange Management Tools):
$ExchAdmCred = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://msk-exch1.winitpro.ru/PowerShell/ -Authentication Kerberos -Credential $ExchAdmCred
Import-PSSession $Session - Для подключения к облачному тенанту Exchange Online (Microsoft 365) с с включенной мультифакторной аутентификацией (MFA) используйте модуль Exchange Online PowerShell), он поддерживает подключение с помощью современной проверки подлинности (Modern Authentication):
Connect-ExchangeOnline -UserPrincipalName [email protected]
Текущие права доступа к календарю пользователя можно вывести с помощью команды:
Get-MailboxFolderPermission -Identity kbuldogov:\Calendar
kbuldogov:\Календарь
.В столбце User указаны пользователи, а в столбце AccessRights – права доступа. В Exchange есть ряд предопределенных ролей, используемых для общего доступа к папкам и календарю (в порядке увеличения привилегий):
- None
- AvailabilityOnly
- Contributor
- Reviewer
- NonEditingAuthor
- Author
- PublishingAuthor
- Editor
- PublishingEditor
- Owner
Чтобы предоставить другому пользователю доступ к ящику, используйте команду Add-MailboxFolderPermission. Например, чтобы предоставить права редактирования в календаре Boss1 пользователю NestorV, выполните команду:
Add-MailboxFolderPermission -Identity boss1:\Calendar -User NestorV -AccessRights Editor
Если нужен доступ только на просмотр календаря:
Add-MailboxFolderPermission -Identity boss1:\Calendar -User NestorV -AccessRights Reviewer
Чтобы удалить права на календарь:
Remove-MailboxFolderPermission -Identity boss1:\Calendar –user NestorV
Можно экспортировать в CSV файл текущие права на календари всех ящиков тенанта Azure (организации Exchange):
$Mailboxes = Get-Mailbox -ResultSize Unlimited | Select-Object UserPrincipalName
foreach ($mailbox in $Mailboxes) {
Get-MailboxFolderPermission -Identity "$($mailbox.UserPrincipalName):\Calendar" |
Select-Object @{Name="UrerPrincipalName";E={$mailbox.UserPrincipalName}},FolderName,User,AccessRights |
Export-Csv C:\PS\Exchange_Calendar_report.csv -NoTypeInformation -Append
}
Полученный CSV файл с UPN почтовых ящиков и правами доступа к каленжарю можно в дальнейшем проанализировать в Excel.
Следующий PowerShell скрипт разрешит определенному пользователю просматривать все календари в организации:
Foreach ($Mailbox in (Get-Mailbox -ResultSize Unlimited)) { Add-MailboxFolderPermission -identity "$($Mailbox.Name):\Calendar" -AccessRights Owner -User NestorV }
Управление видимостью (free/busy) в календарях ящиков Exchange/Microsoft 365
Пользователи одной организации могут просматривать информацию и доступности других пользователей или ресурсных ящиков. По-умолчанию доступна только информация Свободен/Занят.
Для просмотра не доступны ни темы, ни описания, ни местоположения для записей в календаре других пользователей.
Такое поведение обеспечивается благодаря тому, что на все ящики назначено разрешение
Default= AvailabilityOnly
. Тип разрешения AvailabilityOnly предоставляет только право на просмотр информации доступности Free/Busy.
Возможно, вы хотите, чтобы пользователи могли просматривать не только доступность, но и темы и местоположения событий в календаре определенного ящика (например, общего календаря ресурса). Следующая команда разрешит всем пользователям просматривать события в календарях всех комнат:
Foreach ($Mailbox in (Get-Mailbox -ResultSize Unlimited) | Where {$_.ResourceType -eq "Room") { Add-MailboxFolderPermission -identity "$($Mailbox.Name):\Calendar" -AccessRights AvailabilityOnly -User Default }
По-умолчанию вместо темы встречи показывается имя владельца. За это отвечает атрибут
AddOrganizerToSubject = $true
. Чтобы разрешить просматривать в календаре комнаты темы и их содержимое:
Set-CalendarProcessing room1 -DeleteComments $false -DeleteSubject $false -AddOrganizerToSubject $false
В Exchange Online вы можете настроить, разрешать ли пользователям публиковать свои календари для внешних пользователей (организаций). Откройте Exchange Admin Center и перейти в раздел Organization -> Sharing.
По умолчанию используется Default Sharing Policy, которая разрешает делиться с внешними организациями только информацией Free/Busy. Здесь вы можете ограничить список почтовых доменов, с которыми можно делиться календарями и/или изменить набор информации в календаре, которой можно делиться (темы, местоположение, организатор).
Добрый день.
Как поменять управление видимостью календарей по умолчанию?
Понятно, что можно дать всем на все текущие ящики доступ, но это продеться делать каждый раз при добавлении нового пользователя.
Foreach ($Mailbox in (Get-Mailbox -ResultSize Unlimited) | Where {$_.ResourceType -eq «Room») { Add-MailboxFolderPermission -identity «$($Mailbox.Name):\Calendar» -AccessRights AvailabilityOnly -User Default }
не хватает скобочки и права криво, нужно -AccessRights LimitedDetails
А куда писать название комнаты ?
А как изменить рабочее время комнаты (room) в «ресурсах — комнаты и оборудование»
Set-MailboxCalendarConfiguration -Identity room1 -WorkingHoursStartTime 08:00:00 -WorkingHoursEndTime 17:59:59
У меня заработало без ошибок только в таком виде (с Name длинные имена переговорок выдавали ошибку, заменил Name на Alias и подправил все ошибки в синтаксисе).
Foreach ($Mailbox in (Get-Mailbox -ResultSize Unlimited) | where {$_.ResourceType -eq «Room»}) {Add-MailboxFolderPermission -identity «$($Mailbox.Alias):\Calendar» -AccessRights LimitedDetails -User default}
Есть кейс: уволился сотрудник и наплодил кучу встреч в календаре повторяющихся. Учетка его отключена в AD. Пробовали вбивать команды на изменение владельца календаря, пробовали вбивать команды на удаление всех событий. Команда успешно отрабатывает, но события никуда не деваются. Давали полные права другой учетке на его календарь. Но всё равно при подсовывании его календаря пользователь с полными правами (ставили через powershell) не может удалить события из календаря. Непонятно, что мешает
На сайте есть статья:
Как получить список или удалить событие в календаре Exchange из PowerShell?
https://winitpro.ru/index.php/2023/04/04/poluchit-udalit-sobytie-v-kalendare-powershell/
Там сценарии описаны. Если не работают — возможно с правами какой-то затык