Пользователи не могут отправлять сообщения электронной почты с мобильного устройства или из общего почтового ящика в Exchange 2000 Server и Exchange Server 2003

Переводы статьи Переводы статьи
Код статьи: 912918 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

Попытка отправить электронное сообщение в Microsoft Exchange 2000 Server или в Microsoft Exchange Server 2003 заканчивается неудачей. Кроме того, пользователь может получить одно из перечисленных ниже сообщений об ошибке или один из отчетов о невозможности доставки (NDR).

Сообщения об ошибках

  • Отказано в доступе
  • У вас нет прав, необходимых для выполнения этой операции. Обратитесь к ответственному за папку или к администратору сети.
  • Отсутствующее в списке сообщение об ошибке
  • MAPI_E_NO_ACCESS -2147024891
  • Не удалось отправить сообщение для пользователя ИМЯ ПОЛЬЗОВАТЕЛЯ (HRESULT:-2147024891). Приостановка пользователя ИМЯ ПОЛЬЗОВАТЕЛЯ. (Ошибка безопасности — нет доступа к почтовому ящику пользователя.)
  • Ресурс не найден
Примечание. Сообщение об ошибке «Отказано в доступе» или «Ресурс не найден» в Outlook Web Access отображается, если вы вошли с правами учетной записи представителя.

Сообщения NDR

  • Отсутствуют разрешения для отправки сообщений данному получателю. Обратитесь за помощью к системному администратору.
  • Сообщение не удается отправить из данного почтового ящика. У вас нет прав для отправки сообщения вместо указанного пользователя.
Данная проблема возникает при использовании следующих продуктов независимых производителей:
  • Research In Motion (RIM) Blackberry Enterprise Server (BES)
  • Good Technology GoodLink Wireless Messaging
Однако подтверждено, что следующие продукты независимых производителей не подвержены рассматриваемой проблеме:
  • Cisco Unity Unified Messaging
  • Quest Migration Suite for Exchange
  • Microsoft ExMerge для Exchange
Данная проблема может также возникать в отдельных программах MAPI или объектах CDO (Collaborative Data Objects), используемых при отправке сообщений электронной почты.

Кроме того, эта проблема может возникать в продуктах независимых производителей, использующих служебные учетные записи для отправки сообщений электронной почты. При использовании продукта независимого производителя, в котором возникает рассматриваемая проблема, рекомендуется обратиться к поставщику данного продукта за помощью по ее устранению. Для получения дополнительных сведений см. раздел «Дополнительные сведения».

Внимание! В качестве экстренной меры по восстановлению работоспособности функции «Отправить как» в критически важных для предприятия приложениях можно предоставить разрешение «Отправить как» учетной записи службы через наследование в контейнере Active Directory или в целом домене. Подробные указания по выполнению этой процедуры приведены в разделе . Хотя таким способом можно эффективно устранить непосредственную неполадку, при этом следует учитывать некоторые соображения, касающиеся безопасности и управления. Разрешение «Отправить как» может быть предоставлено учетным записям, которым его предоставлять не планировалось, и следует принимать во внимание это разрешение при перемещении пользовательских учетных записей в другой контейнер.

Причина

Данная проблема возникает в следующих случаях:
  • Учетная запись, используемая для отправки сообщений электронной почты, не имеет разрешений на отправку сообщений электронной почты от имени владельца почтового ящика.
  • Установлен пакет обновления 3 (SP3) для Microsoft Exchange 2000 Server с файлом Store.exe версии 6619.4 или более поздней версии. Упоминание о версии 6619.4 впервые появилось в следующей статье базы знаний Майкрософт:
    915358 Исправление, изменяющее режим работы при полном доступе к почтовому ящику в Exchange 2000 Server
  • Установлен пакет обновления 1 (SP1) для Microsoft Exchange 2003 Server с файлом Store.exe версии 7233.51 или более поздней версии. Упоминание о версии 7233.51 впервые появилось в следующей статье базы знаний Майкрософт:
    895949 Изменение режима работы, связанного с правом отправки сообщений от имени другого лица в Exchange 2003
    Следует отметить, что данное исправление не включено в пакет обновления 2 (SP2) для Microsoft Exchange 2003. Если установлена версию данного исправления для Exchange Server 2003 SP1, необходимо также установить версию для SP2 после установки пакета обновления 2 (SP2).
  • Установлен пакет обновления 2 (SP2) для Exchange Server 2003 с файлом Store.exe версии 7650.23 или более поздней версии. Упоминание о версии 7650.23 впервые появилось в следующей статье базы знаний Майкрософт:
    895949 Изменение режима работы, связанного с правом отправки сообщений от имени другого лица в Exchange 2003
    Примечание Этого изменения нет в пакете обновления 3 для Exchange 2000 Server, пакете обновления 1 для Exchange Server 2003 и в пакете обновления 2 для Exchange 2003. Данное изменение было реализовано после выпуска всех этих пакетов обновления, но оно поддерживается в каждом из них. Это изменение будет включено в следующие пакеты обновления для данных продуктов.

    Для поддержки нового поведения обновления 2 для Exchange Server 2003 необходимо установить дополнительное обновление, даже если на компьютере уже установлена версия обновления для Exchange Server 2003 с пакетом обновления 1.

Решение

Ранее версии файла Store.exe, указанные в разделе «Причина» и предоставляющие права полного доступа к почтовому ящику, явно предоставляли права отправки сообщений от имени владельца почтового ящика. Это означало, что другая учетная запись с правами полного доступа к почтовому ящику могла отправлять сообщения электронной почты так, как если бы они были отправлены владельцем почтового ящика.

Многие пользователи Microsoft Exchange высказали пожелания, чтобы права отправки сообщений от имени другого лица были отделены от прав полного доступа к почтовому ящику по следующим двум причинам:
  • чтобы предотвратить подмену адреса отправителя в сообщениях электронной почты;
  • чтобы сообщения, отправленные представителем, были четко отграничены от сообщений, отправленных действительным владельцем почтового ящика.
Все новые версии банка сообщений Exchange требуют разрешения на отправку сообщений от имени другого лица для отправки сообщений электронной почты от имени владельца почтового ящика. Однако имеется три исключения из этого правила:
  • Учетная запись владельца почтового ящика не требует разрешения «Отправить как» для своего собственного почтового ящика.
  • Связанная внешняя учетная запись для почтового ящика не требует разрешения «Отправить как».
  • Учетная запись представителя, также имеющая права полного доступа к почтовому ящику, не требует разрешения «Отправить как».
Для получения дополнительных сведений об этих исключениях см. раздел «Дополнительные сведения».

Для всех других учетных записей, которым частично или полностью предоставлены права доступа к почтовому ящику, должно быть также предоставлено разрешение «Отправить как» для учетной записи владельца почтового ящика, чтобы с этой учетной записи можно было отправлять сообщения от имени владельца почтового ящика. Это относится также к служебным учетным записям приложений, которые, среди прочих, выполняют функции отправки сообщений электронной почты пользователям мобильных устройств.

Разрешения на отправку сообщений от имени другого лица должны быть предоставлены служебной учетной записи для каждого объекта-пользователя, имеющего почтовый ящик. Невозможно предоставить права отправки сообщений от имени другого лица для сервера Exchange или для объекта базы данных и при этом добиться эффекта предоставления прав на отправку сообщений от имени другого лица для всех почтовых ящиков в базе данных.

Это происходит, потому что разрешения на отправку сообщений от имени другого лица являются разрешениями Active Directory, которые применяются к объектам Active Directory, для которых они и устанавливаются. Предоставление прав отправки сообщений от имени другого лица для объекта базы данных Exchange предоставляет разрешение на отправку сообщений от имени другого лица самой базе данных. Тем не менее, это не предоставляет вам доступа к учетным записям пользователей, имеющих разрешения на отправку сообщений от имени другого лица и имеющих почтовые ящики в базе данных.

Примечание. Предоставление разрешений на получение сообщений от имени другого лица в базе данных Exchange эквивалентно предоставлению прав полного доступа ко всем почтовым ящикам, имеющимся в базе данных. Этот режим работы отличается от разрешений на отправку сообщений от имени другого лица.

При предоставлении прав отправки сообщений от имени другого лица разрешение относится только к объекту базы данных. Оно не относится к почтовым ящикам базы данных. При предоставлении прав получения сообщений от имени другого лица разрешение наследуется всеми почтовыми ящиками, имеющимися в базе данных.

Чтобы лучше понять разницу между двумя типами разрешений, представьте, что все почтовые ящики в базе данных являются папками одного и того же почтового ящика (почтового ящика «базы данных»). Если вы имеете полный доступ к базе данных, у вас есть разрешение на доступ ко всему содержимому базы данных. Оно включает в себя все почтовые ящики.

Разрешение «Отправить как» относится к удостоверению объекта пользователя Active Directory, а не к содержимому почтового ящика, которое хранится в базе данных. При отправке сообщений электронной почты они отправляются не из определенного почтового ящика или базы данных, а от пользователя. Пользователь может быть владельцем почтового ящика или иметь другую учетную запись, обладающую разрешением «Отправить как».

Для предоставления другой учетной записи прав отправки сообщений от имени владельца почтового ящика выполните следующие действия:
  1. Запустите консоль управления «Active Directory — пользователи и компьютеры».
  2. Откройте меню Вид и убедитесь, что выбран пункт Дополнительные параметры. Если он не выбран, то для объектов учетной записи пользователя страница безопасности отображаться не будет.
  3. Откройте свойства учетной записи владельца почтового ящика.
  4. Перейдите на вкладку Безопасность
  5. Если учетной записи нет в списке имен групп или пользователей, добавьте учетную запись, которая должна иметь для этого пользователя разрешение «Отправить как».
  6. В поле Разрешения выберите Разрешить «Отправить как» для соответствующей учетной записи.
  7. Нажмите кнопку ОК.
  8. Перезапустите службу банка данных Microsoft Exchange на сервере Exchange.
Примечание. Если перезагрузка службы банка сообщений Microsoft Exchange не будет выполнена, служба банка данных Microsoft Exchange обновит кэш разрешений, чтобы новые разрешения вступили в силу в соответствии со значением параметра, установленного в следующем подразделе реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\ParametersSystem


Имя параметра: Mailbox Cache Age Limit
Тип параметра: REG_DWORD
Представление: десятичное
Значение: Время хранения информации в кэше почтового ящика в минутах.
Значение данного параметра реестра по умолчанию – 120 минут (два часа). При изменении этого параметра реестра необходимо перезапустить службу банка сообщений Microsoft Exchange.

Примечание. Установка слишким низких значений тайм-аута может повлиять на производительность сервера.

Как предоставить разрешение «Отправить как» нескольким учетным записям

В конце настоящей статьи приводится пример сценария, который осуществляет поиск учетных записей с правом полного доступа к почтовому ящику без права отправки сообщений от имени другого лица в доменах Active Directory. Это характеристики служебной или ресурсной учетной записи, которая подвержена влиянию данного изменения безопасности. Сценарий может создавать файл экспорта, который можно просматривать, изменять и повторно импортировать для предоставления разрешения «Отправить как» учетным записям, требующим это разрешение.

Кроме того, можно предоставить разрешение «Отправить как» по наследству каждому объекту пользователя в домене Active Directory или в контейнере. При предоставлении разрешения «Отправить как» этим способом можно предоставить разрешение тем объектам, которым его не планировалось предоставлять. Кроме того, можно потерять разрешения для объектов, которые перемещены из контейнера. Поэтому не рекомендуется использовать данный метод, так как могут возникнуть осложнения с безопасностью, и вы должны знать о последствиях его применения.

Для предоставления разрешения «Отправить как» одной учетной записи на всех пользовательских учетных записях в домене или контейнере Active Directory выполните следующие действия:
  1. Запустите консоль управления «Active Directory — пользователи и компьютеры».
  2. Откройте меню Вид и убедитесь, что выбран пункт Дополнительные параметры Если он не выбран, то для объектов домена и контейнера страница безопасности отображаться не будет.
  3. Откройте свойства домена или контейнера и выберите страницу «Безопасность».
  4. Нажмите кнопку Дополнительно
  5. Если учетная запись, которой необходимо разрешение, отсутствует в списке, нажмите кнопку Добавить и выберите учетную запись. Или же откройте нужную учетную запись для правки, щелкнув ее дважды.
  6. В списке Применить к выберите элемент Объекты пользователя
  7. Предоставьте учетной записи разрешение «Отправить как».
  8. Нажимайте кнопку OK до выхода из консоли и сохранения всех изменений.
Примечание. Приведенный в конце данной статьи сценарий учитывает наследованные разрешения. Таким образом, если разрешение «Отправить как» предоставляется с помощью этого метода, то учетные записи, наследующие разрешение «Отправить как», станут невидимыми для данного сценария. Для обработки этих учетных записей сценарием необходимо сначала удалить наследуемое разрешение «Отправить как».

Специальные правила для учетных записей, защищенных объектом adminSDHolder

При использовании данного сценария для предоставления владельцу почтового ящика, который также является администратором домена, разрешения «Отправить как» оно не будет действовать. Мы настоятельно рекомендуем не создавать почтовые ящики для учетных записей, которые имеют права администратора домена или защищены объектом adminSDHolder.

Объект adminSDHolder представляет собой шаблон для учетных записей, имеющих широкие административные права Active Directory. Для предотвращения непредусмотренного расширения полномочий любая учетная запись, защищенная объектом adminSDHolder, должна иметь права доступа, соответствующие тем, которые перечислены в списке самого объекта adminSDHolder.

При изменении прав или разрешений объекта adminSDHolder для защищенной учетной записи это изменение будет отменено в фоновом режиме в течение нескольких минут. Например, если вы предоставите разрешение «Отправить как» объекту администратора домена для служебной учетной записи приложения, это разрешение будет автоматически аннулировано в фоновом режиме.

Таким образом, вы не можете предоставить разрешение «Отправить как» служебной учетной записи приложения для учетной записи, защищенной объектом adminSDHolder, если вы не измените сам объект adminSDHolder. При изменении объекта adminSDHolder изменятся права доступа для всех защищенных учетных записей. Объект adminSDHolder следует изменять только после тщательного изучения всех возможных осложнений с безопасностью, к которым может привести это изменение.

Чтобы связать почтовый ящик с учетной записью, защищенной объектом adminSDHolder, выполните следующие действия:
  1. Запустите консоль управления «Active Directory — пользователи и компьютеры».
  2. Откройте меню Вид и убедитесь, что выбран пункт Дополнительные параметры. Если он не выбран, то для объектов учетной записи пользователя страница безопасности отображаться не будет.
  3. Создайте учетную запись обычного пользователя, который будет выступать в роли владельца почтового ящика.
  4. Назначьте учетной записи обычного пользователя почтовый ящик на сервере Exchange.
  5. Откройте свойства учетной записи нового владельца почтового ящика.
  6. В поле Дополнительные параметры Exchange предоставьте право полного доступа к почтовому ящику защищенной учетной записи администратора.
  7. На странице «Безопасность» предоставьте разрешение «Отправить как» защищенной учетной записи администратора.
  8. Нажмите кнопку OK, чтобы закрыть окно свойств объекта владельца почтового ящика.
  9. Щелкните правой кнопкой мыши объект учетной записи владельца почтового ящика и выберите Отключить учетную запись, чтобы отключить учетную запись для всех входов в систему.
Для получения дополнительных сведений об учетных записях, защищенных объектом adminSDHolder, щелкните следующие номера статей базы знаний Майкрософт:
907434 Право «Отправить как» удаляется из объекта пользователя после настройки права «Отправить как» в оснастке «Active Directory — пользователи и компьютеры» на сервере Exchange (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
318180 Поток AdminSDHolder негативно влияет на транзитивных членов групп рассылки (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
817433 Недоступность делегированных разрешений и автоматическое отключение наследования (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
306398 Объект AdminSDHolder негативно влияет на делегирование управления для бывших административных учетных записей (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Специальные задачи для BlackBerry Enterprise Server

Задачи 1. Убедитесь, что BlackBerry Enterprise Server работает в качестве отдельной уникальной учетной записи

Убедитесь, что BlackBerry Enterprise Server работает в качестве отдельной учетной записи, специально созданной для задач администрирования. По умолчанию эта учетная запись называется «BESAdmin».

Если для администрирования BlackBerry Enterprise Server существует отдельная учетная запись, перейдите к задаче 2.

Если отдельная учетная запись отсутствует, ее необходимо создать. Затем эту учетную запись необходимо использовать для выполнения задач администрирования. Для получения указаний по выполнению этой задачи посетите веб-узел BlackBerry для вашей версии BlackBerry Enterprise Server.

При использовании BlackBerry Enterprise Server 4.0 или BlackBerry Enterprise Server 4.1 посетите следующий веб-узел BlackBerry:
http://www.blackberry.com/btsc/search.do?cmd=displayKC&docType=kc&externalId=9174704&sliceId=&dialogID=11024244&stateId=1 0 11020632
При использовании сервера BlackBerry Enterprise Server 3.6 посетите следующий веб-узел BlackBerry:
http://www.blackberry.com/btsc/search.do?cmd=displayKC&docType=kc&externalId=KB04334&sliceId=SAL_Public&dialogID=11016727&stateId=1 0 11020358

Задача 2: Убедитесь, что служебной учетной записи BlackBerry Enterprise Server предоставлены соответствующие разрешения

Убедитесь, что служебной учетной записи BlackBerry Enterprise Server предоставлены соответствующие разрешения.

Примечание. Если учетная запись входит в домен, убедитесь, что учетная запись является только членом группы «Пользователи домена». На контроллере домена учетная запись должны быть членом встроенной группы «Администраторы».
  1. В BlackBerry Enterprise Server выполните следующие действия.
    1. Убедитесь, что учетная запись является членом локальной группы «Администраторы».
    2. Установите для учетной записи разрешения «Локальный вход в систему» и «Вход в качестве службы».
  2. Предоставьте разрешения «Exchange View Only Administrator» на уровне группы администраторов. Для этого выполните следующие действия.
    1. В диспетчере Exchange System Manager правой кнопкой мыши щелкните название первой группы администраторов Exchange Server, затем щелкните Делегировать управление.
    2. Для служебной учетной записи BlackBerry Enterprise Server указана роль «Exchange View Only Administrator».
  3. Предоставьте разрешения «Отправить как», «Получить как» и «Администрирование хранилища информации» на уровне сервера всем серверам Exchange Server. Для этого выполните следующие действия.
    1. В диспетчере Exchange System Manager правой кнопкой мыши щелкните название первой группы администраторов Exchange Server, затем разверните группу Серверы.
    2. Щелкните правой кнопкой мыши сервер Exchange Server, выберите Свойства, затем выберите Безопасность.
    3. В верхней области выберите служебную учетную запись BlackBerry Enterprise Server. В нижней области убедитесь, что для разрешений «Отправить как», «Получить как» и «Администрирование хранилища информации» установлены значения Разрешить.
    4. Повторите шаги 3b и 3c для всех серверов Exchange Server.
  4. Предоставьте разрешения «Отправить как», «Получить как» и «Администрирование хранилища информации» хранилищу почтовых ящиков. Для этого выполните следующие действия.
    1. В диспетчере Exchange System Manager правой кнопкой мыши щелкните название первой группы администраторов Exchange Server, затем разверните группу Серверы.
    2. Разверните первую группу хранилища почтовых ящиков, правой кнопкой мыши щелкните все хранилища почтовых ящиков, выберите Свойства, затем выберите Безопасность.
    3. В верхней области выберите служебную учетную запись BlackBerry Enterprise Server. В нижней области убедитесь, что для разрешений «Отправить как», «Получить как» и «Администрирование хранилища информации» установлены значения Разрешить.
    4. Повторите шаги 4b и 4c для всех хранилищ почтовых ящиков на всех серверах Exchange Server.
  5. С помощью оснастки «Active Directory — пользователи и компьютеры» выполните следующие действия.
    1. Щелкните правой кнопкой мыши пользователя, для которого необходимо добавить разрешения, и выберите пункт Свойства.
    2. На вкладке Безопасность добавьте служебную учетную запись службы BlackBerry Enterprise Server, затем установите флажок Отправить как.
Если вы не используете Exchange Server 2003, перейдите к задаче 3.

Задача 3. Очистите кэш сервера BlackBerry Enterprise Server

Для очистки кэша разрешений банка данных перезагрузите службы, связанные с Blackberry, и банк данных Microsoft Exchange. После перезагрузки банка данных следует перезагрузить службы, связанные с RIM Blackberry, для того, чтобы назначить учетную запись “BESAdmin” вновь добавленному разрешению «Отправить как» в банке данных Exchange.

Дополнительную информацию об особых требованиях сервера Blackberry см. на веб-узле сервера BlackBerry:
http://www.blackberry.com/btsc/search.do?cmd=displayKC&docType=kc&externalId=KB04707&sliceId=SAL_Public&dialogID=3016166&stateId=0%200%202441763

Дополнительная информация

Права доступа к почтовому ящику и к папкам Exchange делятся между базами данных Active Directory и Microsoft Exchange. Тем не менее оба типа разрешений устанавливаются в пользовательской консоли управления Active Directory, но различные разрешения хранятся в двух различных местах.

Как правило, если разрешение установлено для объекта на странице «Безопасность», то это разрешение Active Directory. Если разрешение установлено на странице «Дополнительные права почтового ящика Exchange», то это разрешение базы данных Exchange. Таким образом, при попытке получить доступ к странице «Права почтового ящика», когда недоступна база данных пользователя, появляется следующее сообщение об ошибке:
Служба банка сообщений Microsoft недоступна.
Разрешение связанной внешней учетной записи является исключением из правила, согласно которому разрешения, установленные на странице «Дополнительные права почтового ящика Exchange», хранятся в базе данных Exchange. Разрешение связанной внешней учетной записи — это на самом деле даже не настоящее разрешение, а способ установки атрибута Active Directory msExchMasterAccountSID. Атрибут msExchMasterAccountSID сам не является разрешением, но управляет работой других разрешений. Для получения дополнительных сведений об атрибуте msExchMasterAccountSID см. раздел «Связанные внешние учетные записи».

Примечание. Атрибут msExchMailboxSecurityDescriptor службы каталогов Active Directory представляет собой резервную копию подмножества действующих прав доступа к почтовому ящику. Он используется внутри Exchange в различных целях. Кроме того, атрибут msExchMailboxSecurityDescriptor обновляется для соответствия текущим действующим правам, если администраторы используют поддерживаемые интерфейсы для назначения прав.

Однако если атрибут msExchMailboxSecurityDescriptor изменяется непосредственно администратором, изменения не будут распространяться на хранилище Exchange и не вступят в силу. Синхронизация с действительными правами доступа к почтовому ящику не гарантируется. Для чтения или записи прав доступа к почтовому ящику следует использовать атрибут msExchMailboxSecurityDescriptor .

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
310866 Как установить права доступа к почтовому ящику, расположенному в банке данных, в Exchange Server 2003 и Exchange 2000 Server (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Разрешение на полный доступ к почтовому ящику представляет собой разрешение базы данных Exchange. Разрешение «Отправить как» представляет собой разрешение Active Directory. До описанных в настоящей статье изменений, осуществленных файлом Exchange Store.exe, система Exchange не обращалась к параметру разрешения «Отправить как», если отправитель обладал правами полного доступа к почтовому ящику.

Примечание. Можно предоставить разрешение «Отправить как» без предоставления прав полного доступа к почтовому ящику. В подобных случаях Exchange всегда обращается к разрешению «Отправить как».

Поскольку разрешение «Отправить как» включено в право полного доступа к почтовому ящику, администратор сервера Exchange может предоставлять сам себе действующие разрешения «Отправить как» для любого почтового ящика на сервере, который он администрирует. Он может осуществить это действие, поскольку администраторы имеют полный контроль над базой данных Exchange. Разделение разрешения «Отправить как» и прав полного доступа к почтовым ящикам позволяет администраторам Active Directory блокировать этот процесс, поскольку разрешение «Отправить как» относится к Active Directory, а не разрешением хранилища Exchange. Таким образом, этот процесс не обязательно контролируется администраторами Exchange.

Владельцы почтовых ящиков

Владелец почтового ящика представляет собой учетную запись пользователя Active Directory, чей атрибут msExchMailboxGUID содержит глобальный уникальный цифровой идентификатор (GUID) для определенного почтового ящика. Только одной учетной записи во всем лесу разрешено иметь идентификатор GUID для определенного почтового ящика. При попытке установить второго владельца с тем же идентификатором GUID Active Directory отвергнет изменение и выдаст сообщение об ошибке.

При создании почтового ящика для учетной записи или при подключении отключенного почтового ящика к учетной записи Active Directory для этой учетной записи автоматически устанавливается идентификатор GUID почтового ящика. Непосредственное установление идентификатора GUID требуется или рекомендуется в редких случаях.

Связанные внешние учетные записи

Обычная конфигурация Exchange предполагает установку Exchange в лесу ресурсов. Лес ресурсов представляет собой лес, расположенный в другом лесу, отличном от учетных записей пользователя, имеющих почтовые ящики в системе. Это обстоятельство представляет собой проблему, поскольку атрибут msExchMailboxGUID может быть установлен только для объектов, расположенных в том же лесу, что и сервер Exchange.

Решение этой проблемы — снабдить учетную запись в лесу сервера Exchange почтовым ящиком. Затем эта учетная запись с почтовым ящиком связывается с учетной записью в другом лесу или в другом домене Microsoft Windows NT 4. Вы можете сделать это, предоставив разрешение Associated External Account. Разрешение Associated External Account может предоставляться только одной учетной записи. Выбранная учетная запись должна быть расположена в другом лесу.

При предоставлении разрешения Associated External Account значение SID для внешней учетной записи записывается в атрибут msExchMasterAccountSID владельца почтового ящика. Таким образом, это вообще не является разрешением, а всего лишь удобным способом управления значением атрибута msExchMasterAccountSID. После установки атрибута msExchMasterAccountSID внешней учетной записи, владеющей идентификатором SID, будет предоставлен доступ к Exchange, как если бы это была учетная запись действительного владельца почтового ящика.

Это распространяется только на доступ к Exchange, а не на доступ к Active Directory. Кроме того, следует пометить учетную запись владельца почтового ящика как «Отключенную для входов» после установки разрешения Associated External Account, чтобы все разрешения работали надлежащим образом.
300456 Разрешения и делегирования клиента не сохраняются после назначения в Exchange 2000 (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Сценарии делегирования

Представитель — это пользователь, которому предоставлены права частичного доступа к другому почтовому ящику и право отправки сообщений от имени владельца этого почтового ящика. Обычный сценарий делегирования заключается в предоставлении помощнику доступа к календарю руководителя. Обычно представитель может просматривать и обновлять календарь. Кроме того, представитель может отвечать на сообщения электронной почты от имени руководителя.

Делегирование доступа осуществляется путем добавления представителя к многозначному атрибуту publicDelegates владельца почтового ящика. Все пользователи, перечисленные в данном атрибуте, имеют право отправки сообщений от лица владельца почтового ящика. Когда такой представитель отправляет сообщение электронной почты, содержащее имя владельца почтового ящика в поле От, в поле От сообщения электронной почты содержатся следующие значения:
<Имя представителя> от имени <Владелец почтового ящика>
Тем не менее, сообщение отправляется представителем, а не владельцем почтового ящика.

Ниже представлен список двух интерфейсов, при помощи которых можно предоставить представителю право отправки сообщений от имени владельца почтового ящика.
  • На объекте-владельце почтового ящика предоставьте право отправки сообщений от вашего имени в диалоговом окне Exchange General.
  • В Microsoft Outlook воспользуйтесь диалоговым окном Представители.
Оба этих метода устанавливают атрибут publicDelegates. Однако метод, использующий Outlook, предоставляет представителю также определенные права доступа к папкам. Кроме того, можно предоставить представителю определенные права доступа непосредственно из окна свойств отдельной папки в Outlook.

IВ отдельных случаях установить атрибут publicDelegates в Outlook не удастся.
329622 При предоставлении доступа в Outlook пользователю не предоставляется право отправки сообщений от имени другого лица (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Когда вы делегируете права доступа к вашему почтовому ящику, представитель имеет возможность воспользоваться правом отправки сообщений от вашего имени даже в том случае, если вы не предоставили ему права доступа к какой-либо из папок вашего почтового ящика. Основное разрешение, получаемое представителем, — это право отправки сообщений от вашего имени. Права доступа к папкам вашего почтового ящика должны быть предоставлены дополнительно к разрешениям делегирования.

Обычно представитель использует Microsoft Outlook для доступа к отдельным папкам, разрешение на доступ к которым вы ему предоставили. Такое разрешение вы можете предоставить, выбрав из меню Файл приложения Outlook пункт Открыть, а затем пункт Папка другого пользователя.

Кроме того, представитель может открыть ваш почтовый ящик, включив его в список дополнительных почтовых ящиков на вкладке Дополнительно своего профиля Outlook. В результате применения данного метода ваш почтовый ящик отображается в дереве папок Outlook представителя. Кроме того, в результате применения данного метода представитель получает доступ ко всем папкам вашего почтового ящика, на которые ему были даны разрешения.

Может потребоваться, чтобы ваш представитель в одних случаях имел разрешение «Отправить от имени», а в других случаях разрешение «Отправить как». Для предоставления представителю этих двух разрешений выполните следующие действия:
  • Предоставьте представителю право полного доступа к почтовому ящику. Это невозможно сделать при помощи Outlook. Администратор Active Directory должен сделать это в учетной записи владельца почтового ящика. Даже если вы предоставите права владельца для доступа ко всем папкам вашего почтового ящика, это не будет эквивалентно праву полного доступа к почтовому ящику.
  • Не предоставляйте представителю разрешения «Отправить как». Если вы предоставите представителю разрешение «Отправить как», все сообщения электронной почты, отправленные представителем, будут отправлены с разрешением «Отправить как». После этого представитель не сможет воспользоваться разрешением «Отправить от имени».
В этом случае представитель, желающий воспользоваться разрешением отправки сообщений от вашего имени, должен подключиться к своему собственному почтовому ящику. Если представители отвечают на сообщение электронной почты или пересылают сообщение электронной почты, которое уже находится в одной из ваших папок, это сообщение будет автоматически отправлено от вашего имени. Если представитель создает новое электронное сообщение от вашего имени, он должен ввести ваше имя в поле От для сообщения электронной почты, которое отправляется от вашего имени.

Независимо от того, открывал ли представитель только ваши папки или ваш почтовый ящик в целом в качестве вторичного почтового ящика, все сообщения электронной почты, отправленные представителем от вашего имени, используют разрешение «Отправить от имени» до тех пор, пока почтовый ящик представителя является первичным почтовым ящиком для текущего профиля Outlook.

Если представитель оправляет сообщение от вашего имени, он должен подключиться к вашему почтовому ящику с использованием отдельного профиля Outlook, открывающего только ваш почтовый ящик. Сообщения электронной почты, оправляемые представителем с использованием этого профиля, будут автоматически отправлены от вашего имени.

Поиск учетных записей, имеющих право полного доступа к почтовому ящику без разрешения «Отправить как»

Сценарий, описанный в настоящем разделе, осуществляет поиск учетных записей пользователя с полным доступом к почтовому ящику, не имеющих разрешения «Отправить как», в одном домене Active Directory за один раз.

Внимание! Перед изменением разрешений ознакомьтесь с разделом Сведения о владельцах почтовых ящиков с представителями.

Сценарий имеет три следующих режима:
  • Экспорт. Можно вывести список пользователей, имеющих полный доступ к почтовому ящику, но не имеющих разрешения «Отправить как». После этого можно просмотреть этот список в редакторе «Блокнот» или в другом текстовом редакторе и удалить учетные записи, которым не нужно предоставлять разрешение «Отправить как».
  • Импорт. Можно импортировать список пользователей, которые имеют полный доступ к почтовому ящику и которым также следует предоставить разрешение «Отправить как». Можно использовать данный сценарий для предоставления пользователю права полного доступа к почтовому ящику, а также предоставления права отправки сообщения от имени другого лица. Для предоставления права отправки сообщений от имени другого лица каждой учетной записи должно быть предоставлено право полного доступа к почтовому ящику.
  • SetAll. Можно предоставить разрешение «Отправить как» всем пользователям в домене, которые уже имеют право полного доступа к определенному почтовому ящику. Будет создан файл журнала в том же формате, что и файл экспорта. Это является эквивалентом запуска режимов экспорта и импорта без правки файла экспорта.
Примечание. Для этого сценария нет команды отмены.

Разрешения, необходимые для данного сценария

Сценарий необходимо запускать, подключившись с учетной записью администратора в том же лесу, что и учетные записи владельцев почтовых ящиков. Сценарий может не работать, если учетная запись имеет административные полномочия в других лесах. Кроме того, сценарий может не работать при его запуске на рабочей станции, включенной в лес, отличный от того, в который включены учетные записи владельца почтового ящика.

Если эти условия выполняются, то сценарий с несколькими административными учетными записями в одном сеансе входа в систему можно выполнять с помощью команды RunAs.exe. Эта процедура используется, если Active Directory и сервер Exchange разделены на сегменты и отсутствует единая учетная запись, способная администрировать все серверы Exchange или все домены Active Directory. Можно открыть командную строку для запуска сценария от имени каждой учетной записи администратора. Возможна следующая ситуация:
RunAs.exe /user:domain\account CMD.EXE
ПримечаниеВ одном и том же домене не следует одновременно запускать несколько экземпляров сценария.

Поля записаны в файле экспорта в порядке следования. Поля перечислены в том порядке, в котором они представлены в файле экспорта.
  • Отображаемое имя учетной записи владельца почтового ящика

    В выходном файле одному владельцу почтового ящика может соответствовать несколько строк. Это происходит в том случае, если несколько других учетных записей обладают правами полного доступа к почтовому ящику одной и той же учетной записи.
  • Домен и имя входа для учетной записи, имеющей право полного доступа к почтовому ящику, но не имеющей разрешения «Отправить как»

    Одна и та же учетная запись может несколько раз встречаться в файле экспорта, если у этой учетной записи есть доступ к нескольким почтовым ящикам. Это часто относится к служебной учетной записи приложения или к лицу, контролирующему несколько почтовых ящиков.
  • Отображаемое имя учетной записи, имеющей право полного доступа к почтовому ящику, но не имеющей разрешения «Отправить как»

    Это поле указывается в дополнение к полю «Имя входа», чтобы облегчить поиск учетной записи.
  • Наличие представителей владельца почтового ящика

    Если у владельца почтового ящика есть представители, то это поле имеет значение «Has Delegates». Если у владельца почтового ящика нет представителей, то это поле имеет значение «No Delegates».
  • Включенное или отключенное состояние учетной записи владельца почтового ящика

    Данное поле используется для идентификации ресурса или учетных записей почтовых ящиков нескольких лесов. Как правило, такие учетные записи отключены.
  • Полное отличающееся имя учетной записи владельца почтового ящика

    Это поле используется для идентификации домена и контейнера учетной записи владельца почтового ящика.
  • Полное отличающееся имя базы данных почтового ящика владельца почтового ящика

    Это поле содержит сведения о базе данных, группе хранилищ, сервере и административной группе для данного почтового ящика.
В следующем примере пользователь, имеющий имя «NoSendAs», имеет права полного доступа к почтовому ящику, но не имеет разрешения «Отправить как» для «Почтового ящика» владельца:
"""Почтовый ящик""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled""" [дополнительные поля опущены]

Конфигурация рабочей станции администратора для сценария

Данный сценарий использует интерфейсы управления Exchange для взаимодействия с серверами Exchange. Таким образом, данный сценарий должен быть запущен с сервера Exchange или с рабочей станции с установленной программой Exchange System Administrator.

Правка файла экспорта

Файл экспорта форматируется как простой текст в формате Юникод, чтобы была возможность обработки наборов символов различных языков. Некоторые текстовые редакторы могут не иметь возможности корректно просматривать или изменять файл или могут сохранять файл в текстовом формате ANSI или ASCII. Текстовые файлы в формате Юникод правильно отображаются в программе «Блокнот» для Microsoft Windows XP, Microsoft Windows 2000 и Microsoft Windows 2003. Кроме того, правильно обрабатывать текстовые файлы в кодировке Юникод может Microsoft Excel.

Выходной файл представляет собой файл, разделенный знаками табуляции с тройными кавычками, в которые заключены значения каждого поля. Тройные кавычки используются для того, чтобы операции импорта и экспорта из Excel были более определенными. В Excel тройные кавычки заменяются одиночными, а при сохранении файла в формате Юникод опять становятся тройными. Чтобы правильно открыть и сохранить файл экспорта в Excel, воспользуйтесь следующими указаниями.

Кроме того, выполнить фильтрацию файла экспорта можно без использования Excel, с помощью программы Find.exe или Findstr.exe. Данные программы включены в состав Windows. Они позволяют выполнить поиск слов в файле и вывести только те строки, которые содержат эти слова, либо только строки, которые не содержат этих слов. Например, если нужно создать файл со списком всех владельцев почтовых ящиков, у которых есть представители, с помощью любой из этих команд можно создать файл, который будет содержать только строки с фразой "Has Delegates":
Find.exe “Has Delegates” OriginalFile.txt > HasDelegates.txt

Findstr.exe /C:”Has Delegates” OriginalFile.txt > HasDelegates.txt
Теперь предположим, что необходимо создать список владельцев почтовых ящиков, не имеющих делегатов. Параметр /V позволяет вывести все строки, не соответствующие критерию поиска. Воспользуйтесь любой из команд, чтобы создать файл, исключающий из списка все строки с текстом «Has Delegates»:
Find.exe “No Delegates” OriginalFile.txt > NoDelegates.txt

Find.exe /V “Has Delegates” OriginalFile.txt > NoDelegates.txt

Findstr.exe /C:”No Delegates” OriginalFile.txt > NoDelegates.txt

Findstr.exe /V /C:”Has Delegates” OriginalFile.txt > NoDelegates.txt
Эти команды также можно использовать для создания файла, содержащего список всех учетных записей, для которых служебная учетная запись приложения имеет право полного доступа к почтовым ящикам, но не имеет разрешения «Отправить как». С параметром /I команда обрабатывает аргументы без учета регистра:
Find.exe /I “domain\ServiceAccount” OriginalFile.txt > ServiceAccount.txt

Findstr.exe /I /C:”domain\ServiceAccount” OriginalFile.txt > ServiceAccount.txt
Примечание. При использовании Find.exe для создания файла необходимо удалить строки заголовка, создаваемые командой Find.exe в начале файла.

При использовании программы Findstr.exe не следует использовать подстановочные символы (*.*) для имен файлов. При использовании подстановочных символов каждая строка выходного файла будет начинаться с имени файла. После фильтрации с помощью Find.exe или Findstr.exe следует тщательно проверить выходной файл на наличие или отсутствие нужных учетных записей.

В следующем примере пользователь, имеющий имя «NoSendAs», имеет права полного доступа к почтовому ящику, но не имеет разрешения «Отправить как» для почтового ящика владельца.
"""Mailbox Owner""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled""" [дополнительные поля опущены]  

Сведения о владельцах почтовых ящиков с представителями

Как правило, представителю с правами на полный доступ к почтовому ящику (или «сверхпредставителю») разрешение «Отправить как» не предоставляется. Когда сверхпредставитель входит непосредственно в почтовый ящик его владельца, представитель может отправлять почту от его имени. Если представитель использует функции делегирования Outlook («Открытие дополнительных почтовых ящиков» или «Открытие папки другого пользователя»), то сообщения отправляются в режиме «Отправить от имени».

Разрешение «Отправить как» следует предоставлять сверхпредставителю, только если необходимо, чтобы представитель всегда отправлял почту в режиме «Отправить как» и никогда - в режиме «Отправить от имени». Рекомендуется найти в файле экспорта текст "Has Delegates" и определить, являются ли на самом деле перечисленные сверхпредставители представителями владельца почтового ящика.

В файле экспорта перечисляются только сверхпредставители. У обычных представителей нет прав на полный доступ к почтовому ящику. Кроме того, при предоставлении разрешения «Отправить как» обычному представителю, этот представитель всегда будет отправлять сообщения в режиме «Отправить как». Это так, даже если обычный представитель не имеет прав на полный доступ к почтовому ящику. Если представителю разрешение «Отправить как» предоставлено случайно, его можно легко отозвать.

Как открыть файл экспорта в Excel

  1. Запустите Excel, прежде чем открыть файл экспорта.
  2. Откройте файл в Excel как текстовой файл. Откроется окно мастера текстов.
  3. В мастере текстов примите или измените следующие значения:
    • Формат исходных данных: с разделителями
    • Начать импорт со строки: 1
    • Формат файла: Юникод (UTF-8)
    • Символом-разделителем является: знак табуляции
    • Считать последовательные разделители одним: флажок не установлен
    • Ограничитель строк: " (двойные кавычки)

Сохранение файла экспорта после его правки в Excel

  1. В файле экспорта выберите команду Сохранить как.
  2. Дайте файлу другое имя, чтобы сохранить неизмененную копию исходного файла.
  3. В меню Файл выберите Сохранить как, введите имя выходного файла и выберите Текст Юникод в раскрывающемся списке Тип файла.

Синтаксис сценария

Данный сценарий представляет собой сценарий, выполняющийся в текстовом режиме; он должен быть запущен из командной строки, а не из диалогового окна Выполнить. Чтобы открыть окно командной строки, нажмите кнопку Пуск, выберите пункт Выполнить, введите команду cmd в поле Открыть и нажмите кнопку ОК.

Файлы журнала ошибок и экспорта будут сохранены в текущем каталоге командной строки. Вы должны иметь разрешение на создание файлов в этом каталоге.
Для получения справки по командам командной строки введите следующую команду:
CSCRIPT AddSendAs.vbs
Для экспорта списка пользователей, имеющих право полного доступа к почтовому ящику и не имеющих разрешения «Отправить как» в домене, введите следующую команду:
CSCRIPT AddSendAs.vbs [domain controller name] –Export Пример: CSCRIPT AddSendAs.vbs CORP-DC-1 –Export
Будет создан файл экспорта «Send_As_Export_H_MM_SS.txt».
Для импорта исправленного файла экспорта введите следующую команду:
CSCRIPT AddSendAs.vbs [domain controller name] –Import [имя файла]


Пример:


CSCRIPT AddSendAs.vbs CORP-DC-1 –Import "Send_As_Export_H_MM_SS.txt"

Как предоставить разрешение «Отправить как» для каждого почтового ящика в домене всем пользователям, имеющим право полного доступа к почтовому ящику

Примечание. Если в вашей организации есть представители, имеющие право полного доступа к почтовому ящику, вы не должны использовать режим SetAll. Если вы все же используете режим SetAll в этой ситуации, всем представителям будет предоставлено разрешение «Отправить как». Это может привести к тому, что все отправляемые ими сообщения электронной почты будут использовать разрешение «Отправить как» вместо разрешения «Отправить от имени». Можно решить эту проблему, удалив разрешение «Отправить как», ошибочно предоставленное представителю.
CSCRIPT AddSendAs.vbs [имя контроллера домена] –SetAll


Пример:


CSCRIPT AddSendAs.vbs CORP-DC-1 –SetAll
При использовании режима SetAll будет сгенерирован файл экспорта Send_As_Export_H_MM_SS.txt. Вам следует сохранить этот файл, поскольку в нем зарегистрированы все учетные записи, которые были изменены. При повторном использовании данного сценария список учетных записей будет иным, поскольку учетным записям будет уже предоставлено разрешение «Отправить как».

Ошибки, возникшие при выполнении данного сценария, будут сохранены в файле Send_As_Errors_H_MM_SS.txt. Имя файла, содержащего ошибки, будет соответствовать временной метке часы_минуты_секунды связанного файла экспорта.

Изменение сценария

В организации могут иметься учетные записи, имеющие разрешения для многих объектов, в изменении которых нет необходимости. Чтобы уменьшить размер файла экспорта, можно отфильтровать эти учетные записи, изменив переменную FMA_EXCLUSIVE_LIST в начале сценария. По умолчанию эта переменная перечисляет несколько учетных записей, которые должны исключаться из выходного файла сценария. При необходимости добавьте новые учетные записи, используя следующий формат:
& "<Domain\Name>" & OUTPUT_DELIMITER
Например, можно изменить значение следующей переменной:
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER
таким образом, чтобы она имела следующий вид:
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER & "Mydomain\Service1" & OUTPUT DELIMITER
Это изменение исключит из списка в файле экспорта учетную запись Mydomain\Service1", а также учетные записи «NT AUTHORITY\SELF» и «NT AUTHORITY\SYSTEM». Следует иметь в виду, что значение Domain\Name указывается с учетом регистра именно в таком виде, в каком оно должно появляться в файле экспорта.

В сценарии присутствует еще одна изменяемая переменная, FMA_EXCLUSIVE_EXSVC, которая по умолчанию имеет значение "\Exchange Services" & OUTPUT_DELIMITER, где "Exchange Services" — имя учетной записи, которой предоставлены разрешения с помощью средства Active Directory Connector в ситуациях перехода и сосуществования Exchange 5.5 и Exchange 2000. Эта учетная запись создается в нескольких доменах и, если не запретить ее вывод, может многократно появляться в файле экспорта.

Значением переменной FMA_EXCLUSIVE_EXSVC может быть только одна учетная запись. Имя этой учетной записи указывается без учета регистра. Оно может начинаться с символа обратной косой черты (\) и не должно включать имя домена, к которому принадлежит учетная запись. Вывод этой учетной записи будет запрещен для всех доменов, в которых она существует.

При использовании средств переноса сторонних разработчиков или методов синхронизации каталогов в нескольких доменах может существовать другая учетная запись, предоставившая разрешения на доступ к почтовым ящикам пользователей. В этом случае можно заменить имя этой учетной записи на "\Exchange Services".

Советы и предостережения

  • Не удаляйте файлы журнала и ошибок, генерируемые сценарием. Они могут пригодиться впоследствии при устранении неполадок или отмене изменений. Помните о том, что после предоставления учетной записи разрешения «Отправить как» она более не будет записываться в файл экспорта.
  • При отключении сервера или базы данных Exchange обработка сценария замедляется. В этом случае можно упорядочить файл экспорта по базе данных и переместить строки, связанные с остановленной базой данных, в другой файл для импорта в дальнейшем.
  • Сценарий подавляет вывод учетных записей, имя пользователя для которых заканчивается на "$" или соответствует NT AUTHORITY\SYSTEM. Подобным системным учетным записям обычно не требуются разрешения «Отправить как», а удаление их из файла экспорта значительно сокращает его размер.
  • Файл экспорта должен быть в формате Юникод, прежде чем он может быть импортирован. Если вы непреднамеренно сохранили файл в текстовом формате ANSI, можно исправить эту ошибку, загрузив файл в Блокнот и сохранив его в формате Юникод.
  • Если операция импорта не осуществляется, следует устранить неполадки с помощью пробных учетных записей и отдельных строк в файле импорта. Следует настроить пробную учетную запись, имеющую почтовый ящик на работающем сервере Exchange, а затем предоставить другой пробной учетной записи права полного доступа к почтовому ящику, не предоставляя при этом разрешение «Отправить как».
  • Для этого сценария нет режима отмены. Для удаления разрешений «Отправить как», предоставленных с помощью этого сценария, необходимо создать другой сценарий или удалить эти разрешения вручную. Режим отмены не предусмотрен, чтобы избежать использования этого сценария для удаления разрешений «Отправить как» для всех пользователей в организации.
  • Данный сценарий неверно обрабатывает учетные записи, которым одновременно предоставлен полный доступ к объекту пользователя и полный доступ к почтовому ящику. Полный доступ включает разрешение «Отправить как», в то время как сценарий экспортирует учетную запись как не имеющую этого разрешения. Импорт файла и повторное предоставление этим учетным записям разрешения «Отправить как» не имеет никаких негативных последствий, кроме увеличения размера файла экспорта.
  • Данный сценарий не может обрабатывать учетные записи пользователей Active Directory с отличающимися именами, содержащими знаки табуляции или непарные двойные кавычки. Сценарий корректно обрабатывает имена, содержащие парные двойные кавычки, например,
    “CN=First “Nickname” Last,DC=domain,DC=com”
    .
  • Excel может обрабатывать файл, содержащий не более 65 535 строк. Если размер выходного файла превышает указанный, то перед загрузкой Excel его следует разбить на несколько файлов меньшего размера.
  • В файле Send_As_Errors перечислены учетные записи, при обработке которых произошла ошибка чтения или записи разрешений. Если остальные учетные записи домена были обработаны успешно, учетные записи, перечисленные в этом файле, могут иметь общий критерий, не позволяющий сценарию корректно их обработать. К числу наиболее распространенных относятся следующие проблемы:
    • Недостаточно административных полномочий для просмотра или установки свойств учетных записей.
    • Хранилище почтовых ящиков Exchange не запущено.
    • Рабочая станция не является членом того же домена.
    • Используемая административная учетная запись относится к другому лесу.
Для выполнения данного сценария скопируйте все строки, начиная со слов BEGIN SCRIPT и заканчивая словами END SCRIPT, и вставьте их в обычный текстовой редактор, например «Блокнот». Сохраните сценарий под именем AddSendAs.vbs. BEGIN SCRIPT
Option Explicit

Dim OUTPUT_DELIMITER
OUTPUT_DELIMITER = """""""" & vbTab & """"""""

'Определение исключающегося списка, если FMA предоставляется любому пользователю в этом списке, он игнорируется.  При 
'изменении списка придерживайтесь указанного формата. Каждый псевдоним должен с двух сторон
'выделяться строкой OUTPUT_DELIMITER
Dim FMA_EXCLUSIVE_LIST
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER
Dim FMA_EXCLUSIVE_EXSVC
FMA_EXCLUSIVE_EXSVC = "\Exchange Services" & OUTPUT_DELIMITER

'Permission Type: Allow or Deny
const ACCESS_ALLOWED_OBJECT_ACE_TYPE  = 5
const ADS_ACETYPE_ACCESS_ALLOWED = &h0
const ADS_ACETYPE_ACCESS_DENIED = &h1

'Flags: Specifies Inheritance
const ADS_ACEFLAG_INHERIT_ACE = &h2
const ADS_ACEFLAG_NO_PROPAGATE_INHERIT_ACE = &h4
const ADS_ACEFLAG_INHERIT_ONLY_ACE = &h8
const ADS_ACEFLAG_INHERITED_ACE = &h10
const ADS_ACEFLAG_VALID_INHERIT_FLAGS = &h1f
const ADS_ACEFLAG_SUCCESSFUL_ACCESS = &h40
const ADS_ACEFLAG_FAILED_ACCESS = &h80

'Объявление констант ADSI
Const ADS_OPTION_SECURITY_MASK = 3
Const ADS_OPTION_REFERRALS	= 1
Const ADS_SECURITY_INFO_DACL = 4
Const ADS_CHASE_REFERRALS_NEVER = &h00 
Const ADS_CHASE_REFERRALS_SUBORDINATE = &h20 
Const ADS_CHASE_REFERRALS_EXTERNAL = &h40

'output file name
Const EXPORT_FILE = "Send_As_Export"
Const ERROR_FILE = "Send_As_Errors"

' script mode
const MODE_INVALID = -1 
const MODE_SETALL = 0
const MODE_EXPORT = 1
const MODE_IMPORT = 2
const SETALL = "-SETALL"
const EXPORT = "-EXPORT"
const IMPORT = "-IMPORT"

' argument index
Const ARG_INDEX_MODE = 1
Const ARG_INDEX_DC = 0
Const ARG_INDEX_FILENAME = 2

' column index in import/export file
Const COLUMN_INDEX_USERDISPLAYNAME = 0
Const COLUMN_INDEX_FMAALIAS = 1
Const COLUMN_INDEX_FMADISPLAYNAME = 2
Const COLUMN_INDEX_IFPUBLICDELEGATE = 3
Const COLUMN_INDEX_MAILBOXSTATUS = 4
Const COLUMN_INDEX_USERADSPATH = 5
Const COLUMN_INDEX_HOMEMDB = 6

Const EMPTYSTRING = ""
Const STRNO = "No Delegates"
Const STRYES = "Has Delegates" 
Const MIN_ARG = 2
Const INIT_ARRAY_SIZE = 100

' Microsoft Exchange 
Const EX_MB_SEND_AS_ACCESSMASK  = &H00100
Const EX_FULLMailbox_AccessMask = 1
Const MESO = "Microsoft Exchange System Objects"
Const EX_MB_SEND_AS_GUID = "{AB721A54-1E2F-11D0-9819-00AA0040529B}"

Const ForReading	= 1
Const ForWriting	= 2
Const ForAppending	= 8
Const TristateTrue	= -1
Const ADS_SCOPE_SUBTREE = 2

Dim objUser
Dim objSDMailBox
Dim objSDNTsecurity
Dim objDACLNTSD
Dim objNewACE

Dim sTrusteeAlias()
Dim sFMADeniedList
Dim sFMAExplicitAllow
Dim fACESendasFound
Dim dArraySize
Dim TotalACE
Dim i
Dim rootDSE
Dim conn
Dim objCommand
Dim objCmdDisplayName
Dim rsUsers
Dim FoundObject
Dim objFSO
Dim objfileImport
Dim objfileExport
Dim objfileError
Dim sImportFilePath
Dim cScriptMode
Dim dArgCount
Dim dArgExpected
Dim sDCServer
Dim sMailboxStatus
Dim sIfPublicDelegate
Dim sFMAUserDisplayName
Dim sExportFileName
Dim sErrorsFileName
Dim msPublicDelegates
Dim fError
Dim fOneError
Dim fFMAAllowed

On Error Resume Next
dArraySize = INIT_ARRAY_SIZE
ReDim Preserve sTrusteeAlias(dArraySize)

dArgCount = Wscript.Arguments.Count 
If ( dArgCount < MIN_ARG ) Then
	DisplaySyntax
End If

err.Clear
fError = False
fOneError = False
cScriptMode = MODE_INVALID
Select Case UCase(WScript.Arguments(ARG_INDEX_MODE))
	Case SETALL 
		cScriptMode = MODE_SETALL
		dArgExpected = ARG_INDEX_MODE + 1
	Case EXPORT 
		cScriptMode = MODE_EXPORT
		dArgExpected = ARG_INDEX_MODE + 1
	Case IMPORT 
		cScriptMode = MODE_IMPORT
		dArgExpected = ARG_INDEX_FILENAME + 1
	Case Else 
		cScriptMode = MODE_INVALID
End Select
If (cScriptMode = MODE_INVALID Or dArgCount <> dArgExpected) Then
	DisplaySyntax
End If

sDCServer = WScript.Arguments(ARG_INDEX_DC)

CreateOutputFiles

If ( cScriptMode = MODE_SETALL Or cScriptMode = MODE_EXPORT ) Then
	Dim sDomainContainer
	If (cScriptMode = MODE_SETALL) Then
		Dim strInput 
		WScript.StdOut.WriteLine("Предепреждение: При продолжении всем учетным записям в домене с") 
		WScript.StdOut.WriteLine("с правами на полный доступ к данному почтовому ящику будет также предоставлено")
		WScript.StdOut.WriteLine("разрешение "Отправить как" от имени владельца ящика.")
		WScript.StdOut.WriteLine()
		WScript.StdOut.WriteLine("Чтобы просмотреть список почтовых ящиков перед предоставлением разрешения "Отправить как",")
		WScript.StdOut.WriteLine("отмените эту операцию и используйте режим -Export данного сценария.")
		WScript.StdOut.WriteLine()
		WScript.StdOut.Write("Нажмите Y для продолжения или любую другую клавишу для отмены:") ")
		strInput = WScript.StdIn.ReadLine()
		If (UCase(strInput) <> UCase("Y")) Then
			WScript.Quit
		End If	
	End If
	
	WScript.StdOut.WriteLine()
	WScript.StdOut.WriteLine("""!"" означает ошибку при обработке объекта.")
	WScript.StdOut.WriteLine("     Проверьте файл " & sErrorsFilename)
	WScript.StdOut.WriteLine("Запуск...")
	WScript.StdOut.WriteLine()

	err.Clear	
	Set rootDSE = GetObject("LDAP://" & sDCServer & "/RootDSE")
	sDomainContainer = rootDSE.Get("defaultNamingContext")
	WScript.StdOut.WriteLine("Поиск контроллера домена [ " & sDCServer & " ] для домена [ " & sDomainContainer & " ]")
	
	If (err.number <> 0) Then
		WScript.StdOut.WriteLine("Не удалось найти домен или контроллер домена, ошибка:" & err.Description)
		objfileError.WriteLine("Не удалось найти домен или контроллер домена, ошибка:" & err.Description)
		WScript.Quit
	End If
			
	err.Clear	
	Set conn = CreateObject("ADODB.Connection")
	Set objCommand = CreateObject("ADODB.Command")
	conn.Provider = "ADSDSOObject"
	conn.Open "ADs Provider"
	If (err.number <> 0) Then
		WScript.StdOut.WriteLine("Не удалось подключиться к серверу Active Directory, ошибка:" & err.Description)
		objfileError.WriteLine("Не удалось связаться с сервером Active Directory, ошибка:" & err.Description)
		WScript.Quit
	End If

	Set objCommand.ActiveConnection = conn
	WScript.StdOut.WriteLine("Поиск пользовательских учетных записей для владельцев почтовых ящиков в " & sDomainContainer)
	
	objCommand.CommandText  = "<LDAP://" & sDCServer & "/" & sDomainContainer & ">;(&(&(& (mailnickname=*) (| (&(objectCategory=person)(objectClass=user)(msExchHomeServerName=*)) ))));adspath;subtree"
	objCommand.Properties("searchscope") = ADS_SCOPE_SUBTREE
	objCommand.Properties("Page Size") = 100
	objCommand.Properties("Timeout") = 30 
	objCommand.Properties("Chase referrals") = (ADS_CHASE_REFERRALS_SUBORDINATE Or ADS_CHASE_REFERRALS_EXTERNAL)

	err.Clear	
	Set rsUsers = objCommand.Execute
	If (err.number <> 0) Then
		WScript.StdOut.WriteLine("Не удалось найти владельцев почтовых ящиков, ошибка:" & err.Description)
		objfileError.WriteLine("Не удалось найти владельцев почтовых ящиков, ошибка:" & err.Description)
		WScript.Quit
	End If

	If (rsUsers.RecordCount = 0) Then
		WScript.StdOut.WriteLine("Не удалось найти пользовательские учетные записи владельцев почтовых ящиков в " & sDomainContainer & ".")
		objfileError.WriteLine("Не удалось найти пользовательские учетные записи владельцев почтовых ящиков в " & sDomainContainer & ".")
		fError = True		
	End If

	While Not rsUsers.EOF
		If (fOneError = True) Then
			WScript.StdOut.Write("!")
		Else
			WScript.StdOut.Write(".")
		End If
		fOneError = False
		
		'Skip any mailbox object in Microsoft Exchange System Objects container
		If (0 = Instr(rsUsers.Fields(0).Value, MESO)) Then
			err.Clear 
			Set objUser = GetObject(rsUsers.Fields(0).Value)
			If (err.number <> 0) Then
				objfileError.WriteLine("Failed to get user object: " & rsUsers.Fields(0).Value)
				objfileError.WriteLine("Ошибка: " & err.Description)
				fError = True
				fOneError = True
				err.Clear
			End If
			Set objSDMailBox = objUser.MailboxRights
			If (err.number <> 0) Then
				objfileError.WriteLine("Не удалось получить права почтового ящика: " & rsUsers.Fields(0).Value)
				objfileError.WriteLine("Ошибка: " & err.Description)
				fError = True
				fOneError = True
				err.Clear
			End If
			Set objSDNTsecurity = objUser.ntSecurityDescriptor
			If (err.number <> 0) Then
				objfileError.WriteLine("Не удалось получить NTSD: " & rsUsers.Fields(0).Value)
				objfileError.WriteLine("Ошибка: " & err.Description)
				fError = True
				fOneError = True
				err.Clear
			End If
			
			Set objDACLNTSD = Nothing
			If (objUser.AccountDisabled) Then
				sMailboxStatus = "Disabled"
			Else
				sMailboxStatus = "Enabled"
			End If

			'Запросить список publicDelegates для этого пользователя
			err.Clear
			msPublicDelegates = objUser.Get("publicDelegates")
			If (err.number <> 0) Then
				'Для данного пользователя список publicDelegates не установлен
				sIfPublicDelegate = STRNO
				err.Clear
			Else
				sIfPublicDelegate = STRYES
			End If
			
			err.Clear 			
			FindAllFMAUsers objSDMailBox
			
			If (TotalACE > dArraySize) Then
			'Needs to allocate bigger size array
				dArraySize = TotalACE + 1
				ReDim Preserve sTrusteeAlias(dArraySize)
				FindAllFMAUsers objSDMailBox
			End If
			If (err.number <> 0) Then
				objfileError.WriteLine("Failed to query mailbox rights of user: " & rsUsers.Fields(0).Value)
				objfileError.WriteLine("Ошибка: " & err.Description)
				err.Clear
				fError = True
				fOneError = True
			End If
			
			If TotalACE > 0 Then
				Set objDACLNTSD = objSDNTsecurity.DiscretionaryAcl

				For i = 0 to TotalACE - 1 Step 1
					
					'Check if we already have Send As ACE in NT security descriptor
					'If it exists, either allow or deny, we don't need to add send as to it 
					CheckSendAsACE objDACLNTSD, sTrusteeAlias(i)
					
					'Note: deny entries take precedence over allow entries. 
					'If there is FMA deny ACE, skip it even if we find FMA allow ACE 
					IfFMAAllowed(sTrusteeAlias(i) & OUTPUT_DELIMITER)
					If ((fFMAAllowed = True) And (fACESendasFound = 0)) Then
						If cScriptMode = MODE_SETALL Then
							Set objNewACE = CreateObject ("AccessControlEntry")
							objNewACE.AceFlags = 0 
							objNewACE.AceType = ACCESS_ALLOWED_OBJECT_ACE_TYPE
							objNewACE.AccessMask = EX_MB_SEND_AS_ACCESSMASK 
							objNewACE.Flags = 1
							objNewACE.ObjectType = EX_MB_SEND_AS_GUID
							objNewACE.Trustee = sTrusteeAlias(i)

							objDACLNTSD.AddAce objNewAce
						End If
			
						'Query trustee(FMA user) to get its displayName
						Dim rsTrustee
						Dim objTrustee
						Dim dPosition
						Dim sAlias
					
						dPosition = inStr(1, sTrusteeAlias(i), "\")
						sAlias = mid(sTrusteeAlias(i), dPosition + 1)
				
						Set objCmdDisplayName = CreateObject("ADODB.Command")			
						Set objCmdDisplayName.ActiveConnection = conn
						objCmdDisplayName.CommandText  = "<LDAP://" & sDomainContainer & ">;(&(&(& (mailnickname=" & sAlias & ") (| (&(objectCategory=person)(objectClass=user)(msExchHomeServerName=*)) ))));adspath;subtree"
						objCmdDisplayName.Properties("searchscope") = ADS_SCOPE_SUBTREE
						objCmdDisplayName.Properties("Page Size") = 100
						objCmdDisplayName.Properties("Timeout") = 30 
						objCmdDisplayName.Properties("Chase referrals") = (ADS_CHASE_REFERRALS_SUBORDINATE Or ADS_CHASE_REFERRALS_EXTERNAL)
						
						Set rsTrustee = objCmdDisplayName.Execute				
						Set objTrustee = GetObject(rsTrustee.Fields(0).Value)
						
						If (err.number <> 0) Then
							'Failed to query FMA user's display name, use its alias
							sFMAUserDisplayName = sAlias							
						Else
							sFMAUserDisplayName = objTrustee.displayName							
						End If
	
						'output to export file
						err.Clear
						objfileExport.WriteLine ("""""""" & objUser.displayName & OUTPUT_DELIMITER & sTrusteeAlias(i) & OUTPUT_DELIMITER & sFMAUserDisplayName & OUTPUT_DELIMITER & sIfPublicDelegate & OUTPUT_DELIMITER & sMailboxStatus & OUTPUT_DELIMITER & rsUsers.Fields(0).Value & OUTPUT_DELIMITER & objUser.homeMDB & """""""")
						If (err.number <> 0) Then
							objfileError.WriteLine("Пользователя " & rsUsers.Fields(0).Value & " не удалось добавить в файл экспорта. Для данного пользователя разрешения следует настроить вручную.")
							objfileError.WriteLine("Ошибка: " & err.Description)
							err.Clear
							fError = True
							fOneError = True
						End If
						Set objCmdDisplayName = Nothing
						Set rsTrustee = Nothing
						Set objTrustee = Nothing
					End If
				Next
					
				If cScriptMode = MODE_SETALL Then
					err.Clear
					objSDNTsecurity.DiscretionaryAcl = objDACLNTSD
					objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity )
					objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL
					objUser.SetInfo
					If (err.number <> 0) Then
						objfileError.WriteLine("Failed to update ADSI for user: " & rsUsers.Fields(0).Value)
						objfileError.WriteLine("Ошибка: " & err.Description)
						err.Clear
						fError = True
						fOneError = True
					End If
				End If

				TotalACE = 0
				Set objSDMailbox = Nothing
				Set objSDNTsecurity = Nothing
				Set objUser = Nothing
				Set objDACLNTSD = Nothing
			End If
		
		End If	
		rsUsers.MoveNext
	Wend
End If

If (cScriptMode = MODE_IMPORT) Then
	Dim sOneRow
	Dim sArraySplit
	Dim objUserItem
	Dim UserPath
	Dim objUserSD
	Dim objUserDACL
	Dim fNeedToAddSendAs
	
	sImportFilePath = WScript.Arguments(ARG_INDEX_FILENAME)

	WScript.StdOut.WriteLine("При продолжении всем учетным записям, перечисленным в файле " & sImportFilePath ",")
	WScript.StdOut.WriteLine("с правами на полный доступ к данному почтовому ящику")
	WScript.StdOut.WriteLine("будет также присвоено разрешение "Отправить как" от имени владельца ящика.")
	WScript.StdOut.WriteLine()
	WScript.StdOut.Write("Нажмите Y для продолжения или любую другую клавишу для отмены:") ")
	strInput = WScript.StdIn.ReadLine()
	If (UCase(strInput) <> UCase("Y")) Then
		WScript.Quit
	End If	
	WScript.StdOut.WriteLine("Запуск...")
	WScript.StdOut.WriteLine()

	UserPath = EMPTYSTRING	
	err.Clear	
	Set objFSO = CreateObject("Scripting.FileSystemObject")
	Set objfileImport = objFSO.OpenTextFile(sImportFilePath, ForReading, False, TristateTrue)
	If (err.number <> 0) Then
		WScript.StdOut.WriteLine("Не удалось открыть файл импорта " & sImportFilePath & ", ошибка:" & err.Description)
		objfileError.WriteLine("Не удалось открыть файл импорта, ошибка:" & err.Description)
		WScript.Quit
	End If	

	fNeedToAddSendAs = False
	Do While objfileImport.AtEndOfStream <> True
		If (fOneError = True) Then
			WScript.StdOut.Write("!")
		Else
			WScript.StdOut.Write(".")
		End If
		fOneError = False

		err.Clear
		sOneRow = objfileImport.ReadLine
		sArraySplit = Split(sOneRow , OUTPUT_DELIMITER)
		If (err.number <> 0) Then
			objfileError.WriteLine("Failed to parse one row: " & sOneRow )
			objfileError.WriteLine("Ошибка: " & err.Description)
			err.Clear
			fError = True
			fOneError = True
		End If
		
		If (UserPath <> sArraySplit(COLUMN_INDEX_USERADSPATH)) Then
			'A new user
			If (fNeedToAddSendAs = True ) Then
				'update existing user
				err.Clear
				objSDNTsecurity.DiscretionaryAcl = objDACLNTSD
				objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity )
				objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL
				objUser.SetInfo
				If (err.number <> 0) Then
					objfileError.WriteLine("Не удалось обновить разрешения для пользователя " & UserPath)
					objfileError.WriteLine("Ошибка: " & err.Description)
					fError = True
					fOneError = True
				End If
			End If
						
			fNeedToAddSendAs = False
			Set objUser = Nothing
			Set objSDNTsecurity = Nothing
			Set objDACLNTSD = Nothing

			UserPath = sArraySplit(COLUMN_INDEX_USERADSPATH)
			err.Clear
			Set objUser = GetObject(UserPath)
			Set objSDNTsecurity = objUser.ntSecurityDescriptor
			Set objDACLNTSD = objSDNTsecurity.DiscretionaryACL			
			If (err.number <> 0) Then
				objfileError.WriteLine("Failed to get user object: " & UserPath)
				objfileError.WriteLine("Ошибка: " & err.Description)
				err.Clear
				fError = True
				fOneError = True
			End If
		End If
	
		'Add newACE   Do we need this check?
		CheckSendAsACE objDACLNTSD, sArraySplit(COLUMN_INDEX_FMAALIAS)
		If (fACESendasFound = 0) Then
			Set objNewACE = CreateObject ("AccessControlEntry")
			objNewACE.AceFlags = 0 
			objNewACE.AceType = ACCESS_ALLOWED_OBJECT_ACE_TYPE
			objNewACE.AccessMask = EX_MB_SEND_AS_ACCESSMASK 
			objNewACE.Flags = 1
			objNewACE.ObjectType = EX_MB_SEND_AS_GUID
			objNewACE.Trustee = sArraySplit(COLUMN_INDEX_FMAALIAS)

			objDACLNTSD.AddAce objNewACE
			fNeedToAddSendAs = True			
		End If
	Loop
	
	If (fNeedToAddSendAs = True ) Then
		'update the last user
		err.Clear
		objSDNTsecurity.DiscretionaryAcl = objDACLNTSD
		objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity )
		objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL
		objUser.SetInfo
		If (err.number <> 0) Then
			objfileError.WriteLine("Не удалось обновить разрешения для пользователя " & UserPath)
			objfileError.WriteLine("Ошибка: " & err.Description)
			fError = True
		End If
	End If

End If

objFSO.Close
objfileImport.Close
objfileExport.Close
objfileError.Close

Set objFSO = Nothing
Set objfileImport = Nothing
Set objfileExport = Nothing
Set objfileError = Nothing
Set objCommand = Nothing
Set conn = Nothing

WScript.StdOut.WriteLine()
If (fError = True) Then
	WScript.StdOut.WriteLine("Завершено с ошибками. См. " & sErrorsFilename)
Else
	WScript.StdOut.WriteLine("Завершено успешно.") Ошибок не обнаружено.")
End If

Function FindAllFMAUsers (objSD)
Dim objACL
Dim objACE
Dim intACECount
Dim strIndent
Dim dAccessMaskBit
Dim dPosition
Dim sUserAlreadyFound

	On Error Resume Next
	err.Clear
	TotalACE = 0
	sFMADeniedList = EMPTYSTRING
	sFMAExplicitAllow = EMPTYSTRING
	sUserAlreadyFound = OUTPUT_DELIMITER
	intACECount = 0
	Set objACL = objSD.DiscretionaryAcl
	intACECount = objACL.AceCount

	If intACECount Then
		' Open discretionary ACL (DACL) data.
		For Each objACE In objACL		
			
		dPosition = inStr(1, objACE.Trustee, "$")
		If ((0 = Instr(UCase(objACE.Trustee & OUTPUT_DELIMITER), UCase(FMA_EXCLUSIVE_EXSVC))) And (0 = Instr(sUserAlreadyFound, OUTPUT_DELIMITER & objACE.Trustee & OUTPUT_DELIMITER)) And (0 = Instr(FMA_EXCLUSIVE_LIST, OUTPUT_DELIMITER & objACE.Trustee & OUTPUT_DELIMITER)) And (dPosition <> Len(objACE.Trustee)) And ((objACE.AccessMask And EX_FULLMailbox_AccessMask) <>0) And ((objACE.AceType = ADS_ACETYPE_ACCESS_ALLOWED) Or (objACE.AceType = ACCESS_ALLOWED_OBJECT_ACE_TYPE) )) Then
			If (TotalACE < dArraySize) Then
				sTrusteeAlias(TotalACE) = objACE.Trustee
				sUserAlreadyFound = sUserAlreadyFound & objACE.Trustee & OUTPUT_DELIMITER
			End If
			TotalACE = TotalACE + 1	
			If ((objACE.AceFlags And ADS_ACEFLAG_INHERITED_ACE) = 0) Then
				'Keep a list who explictly set FMA at mailbox level
				sFMAExplicitAllow = sFMAExplicitAllow & objACE.Trustee & OUTPUT_DELIMITER			
			End If
		ElseIf (( (objACE.AccessMask And EX_FULLMailbox_AccessMask) <>0 ) And (objACE.AceType = ADS_ACETYPE_ACCESS_DENIED)) Then
			'Keep a list who denied FMA, use OUTPUT_DELIMITER as demiliter, 
			'include both inherited and explicit set at mailbox level
			sFMADeniedList = sFMADeniedList & objACE.Trustee & OUTPUT_DELIMITER			
		End If
		Next
	End If

	Set objACL = Nothing
End Function

Function CheckSendAsACE (objDiscretionaryACL, sTAlias)
Dim objACE
Dim intACECount

	err.Clear
	fACESendasFound = 0
	intACECount = objDiscretionaryACL.AceCount

	If intACECount Then
		For Each objACE In objDiscretionaryACL	
			err.Clear
			If ( (objACE.Trustee = sTAlias) And (objACE.ObjectType = EX_MB_SEND_AS_GUID) ) Then
				fACESendasFound = 1
			End If
			If (err.number <> 0) Then
				objfileError.WriteLine("Не удалось считать разрешения для пользователя " & sTAlias)
				objfileError.WriteLine("Ошибка: " & err.Description)
				err.Clear
				fError = True
				fOneError = True
			End If			
		Next			
	End If	
End Function

Function IfFMAAllowed(sTrustee)
	'FMA allow ACE has been found. Assume it's true
	fFMAAllowed = True
	
	If ( (0 <> Instr(sFMADeniedList, sTrustee)) And (0 = Instr(sFMAExplicitAllow, sTrustee))	) Then
		'If Denied ACE is found, and no explicit allow FMA 
		fFMAAllowed = False
	End If 
End Function

Function CreateOutputFiles
	Dim sTimeArray
	Dim sTimeShort
	Dim sTime
	
	err.Clear
	sTime = Time
	sTimeShort = Split(sTime, " ")
	sTimeArray = Split(sTimeShort(0), ":")

	Set objFSO = CreateObject("Scripting.FileSystemObject")
	sErrorsFileName = ERROR_FILE & "_" & sTimeArray(0) & "_" & sTimeArray(1) & "_" & sTimeArray(2) & ".txt"
	Set objfileError = objFSO.OpenTextFile(sErrorsFileName, ForWriting, True, TristateTrue)

	If (cScriptMode = MODE_SETALL Or cScriptMode = MODE_EXPORT)	Then
		sExportFileName = EXPORT_FILE & "_" & sTimeArray(0) & "_" & sTimeArray(1) & "_" & sTimeArray(2) & ".txt"
		Set objfileExport = objFSO.OpenTextFile(sExportFileName, ForWriting, True, TristateTrue)	
	End If
	
	If err.number <> 0 Then
		WScript.StdOut.WriteLine("Невозможно создать файлы экспорта или файлы ошибок: " & err.Description)
		objfileError.WriteLine("Невозможно создать файлы экспорта или файлы ошибок: " & err.Description)
		fError = True
		fOneError = True
		WScript.Quit	
	End If

End Function

Function DisplaySyntax
	WScript.StdOut.WriteLine("Syntax:")
	WScript.StdOut.WriteLine()
	WScript.StdOut.WriteLine("Экспортировать учетные записи с с правами на полный доступ к почтовому ящику без разрешения "Отправить как":")
	WScript.StdOut.WriteLine("     CSCRIPT """ & WScript.ScriptName & """ DOMAIN_CONTROLLER -Export")
	WScript.StdOut.WriteLine("         Примечание. Список будет сохранен в файле Send_As_Export_HH_MM_SS.txt")
	WScript.StdOut.WriteLine()
	WScript.StdOut.WriteLine("Предоставить разрешение "Отправить как" всем учетным записям, перечисленным в файле экспорта:")
	WScript.StdOut.WriteLine("     CSCRIPT """ & WScript.ScriptName & """ DOMAIN_CONTROLLER -Import ""имя_файла.txt""")
	WScript.StdOut.WriteLine()
	WScript.StdOut.WriteLine("Предоставить разрешение "Отправить как" всем учетным записям в домене, обладающим правами на полный доступ к почтовому ящику:")
	WScript.StdOut.WriteLine("     CSCRIPT """ & WScript.ScriptName & """ DOMAIN_CONTROLLER -SetAll")
	WScript.StdOut.WriteLine("         Примечание. Учетные записи будут перечислены в файле Send_As_Export_HH_MM_SS.txt")
	WScript.StdOut.WriteLine()
	WScript.StdOut.WriteLine("Для всех режимов ошибки записываются в файл Send_As_Errors_HH_MM_SS.txt")

	WScript.Quit	
End Function
END SCRIPT

Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их пригодности для применения в пользовательских приложениях. Примеры в данной статье рассчитаны на пользователя, имеющего достаточный уровень знаний соответствующего языка программирования и необходимых средств разработки и отладки. Специалисты служб технической поддержки Майкрософт могут пояснить назначение тех или иных конструкций кода в конкретном примере, но модификация примеров и их адаптация к задачам разработчика не предусмотрена.
Для получения дополнительных сведений о других средствах поддержки корпорации Майкрософт посетите следующий веб-узел Майкрософт:
http://support.microsoft.com/contactus/?ws=support
В данной статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не гарантирует правильность указанных контактных сведений независимых производителей.

Свойства

Код статьи: 912918 - Последний отзыв: 26 ноября 2007 г. - Revision: 17.2
Информация в данной статье относится к следующим продуктам.
  • Microsoft Exchange 2000 Server Standard Edition
  • Microsoft Exchange 2000 Enterprise Server
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange Server 2003 Enterprise Edition
Ключевые слова: 
kbtshoot kbpending kbbug kbprb KB912918

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com