У меня есть небольшое приложение, которое получает все встречи из Exchange 2010 и помещает их в приложение для управления расписанием. Код для получения встреч выглядит следующим образом (он использует веб-службы Exchange):
var mailbox = service.ResolveName("smtp:" + emailAddress).FirstOrDefault(o => o.Mailbox.MailboxType == MailboxType.Mailbox);
var folderId = new FolderId(WellKnownFolderName.Calendar, mailbox.Mailbox.Address);
var res = service.FindAppointments(folderId, new CalendarView(thisDay, nextDay.AddSeconds(-1)));
Это нормально работает, если я дам учетную запись службы GenericAll
разрешения с использованием этой строки в EMS:
Get-MailboxDatabase | Add-ADPermission -user "DOMAIN\User" -InheritanceType All -AccessRights GenericAll
Тем не мение, GenericAll
дает слишком много возможностей для учетной записи, и я хотел бы уменьшить их только до разрешений, связанных с чтением. Я пробовал разные варианты доступных разрешений, но ничего не работает (я перезапускаю IIS между тестами, чтобы убедиться, что разрешения не кэшированы). Например, в этой строке не работай:
Get-MailboxDatabase | Add-ADPermission -user "DOMAIN\User" -InheritanceType All -AccessRights GenericRead,ListChildren,ListObject
Я видел в сети сценарии, которые давали бы разрешения только на чтение календарей, но, к сожалению, все они, похоже, перечисляют существующие почтовые ящики. Мне нужно решение, которое запускается только один раз и будет работать для всех почтовых ящиков, созданных в будущем.