Los usuarios no pueden enviar mensajes de correo electrónico desde un dispositivo móvil o desde un buzón compartido en Exchange 2000 Server y en Exchange Server 2003

Síntomas

Cuando intenta enviar un mensaje de correo electrónico en Microsoft Exchange 2000 Server o Microsoft Exchange Server 2003, no puede enviar el mensaje de correo electrónico. Además, puede recibir uno de los siguientes mensajes de error o uno de los siguientes informes de no entrega (NDR).

Mensajes de error

  • Acceso denegado
  • No tiene permisos suficientes para realizar esta operación en este objeto. Consulte la carpeta o el administrador del sistema.
  • Error de mensaje no listado
  • MAPI_E_NO_ACCESS -2147024891
  • No se pudo enviar el mensaje de correo para el usuario nombreDeUsuario (HRESULT: -2147024891) pausando el usuario nombreDeUsuario. (Error de seguridad: no puede tener acceso a los buzones de los usuarios.)
  • Recurso no encontrado
Nota: Recibe el mensaje de error "Acceso denegado" o el mensaje de error "No se encuentra el recurso" de Microsoft Outlook Web Access al iniciar la sesión como una cuenta delegada.

NDR

  • No tiene permiso para enviar a este destinatario. Para obtener ayuda, póngase en contacto con el administrador del sistema.
  • No se pudo enviar el mensaje usando su buzón. No tiene permiso para enviar el mensaje en nombre del usuario especificado.

Productos afectados

Se sabe que este problema afecta a los siguientes productos de terceros:
  • Research In Motion (RIM) BlackBerry Enterprise Server (BES)
  • Buena tecnología GoodLink Wireless mensajería
Este problema puede afectar también a programas basados en objetos de datos de colaboración CDO que envían mensajes de correo electrónico o MAPI personalizada.

También pueden verse afectados otros productos de terceros que utilizan las cuentas de servicio para enviar mensajes de correo electrónico. Si está ejecutando un producto de terceros que se ve afectado por este problema, recomendamos que contacte con el proveedor para que le ayude a resolver este problema.

Sin embargo, se ha confirmado que los siguientes productos de terceros no se ven afectados por este problema:
  • Mensajería unificada de Cisco Unity
  • Serie de migración Quest para Exchange
  • La utilidad Microsoft ExMerge para Exchange

Causa

Este problema puede producirse si se cumple alguna de las condiciones siguientes:
  • No tiene permisos para enviar mensajes de correo electrónico como propietario del buzón de la cuenta que está utilizando para enviar el mensaje de correo electrónico.
  • Está ejecutando Microsoft Exchange 2000 Server Service Pack 3 (SP3) junto con una versión del archivo Store.exe igual o posterior a la 6619.4. La versión 6619.4 se puso como disponible en el siguiente artículo de Microsoft Knowledge Base:
    915358 hay una revisión disponible para cambiar el comportamiento del permiso acceso total al buzón en Exchange 2000 Server

  • Está ejecutando Microsoft Exchange Server 2003 Service Pack 1 junto con una versión del archivo Store.exe igual o posterior a la versión 7233.51.
  • Está ejecutando Exchange Server 2003 Service Pack 2 junto con una versión del archivo Store.exe igual o posterior a la 7650.23. La versión 7650.23 se puso como disponible en el siguiente artículo de Microsoft Knowledge Base:
    895949 el comportamiento del permiso "Enviar como" cambia en Exchange 2003

    Este cambio no se incluye con Exchange Server 2003 SP2. Si ha estado ejecutando la versión de Exchange Server 2003 SP1 del archivo Store.exe que incluye este cambio y actualizar a Exchange Server 2003 SP2, debe instalar la versión de Service Pack 2 de esta revisión para conservar el nuevo comportamiento. Este cambio se incluirá en Microsoft Exchange Server 2003 Service Pack 3.

PROBLEMAS DE SEGURIDAD

Antes de las versiones del archivo Store.exe que se enumeran en la sección "Causa", conceder el permiso acceso total al buzón implícitamente permiso para enviar como el propietario del buzón. Esto significaba que otra cuenta que tenga el permiso acceso total al buzón podría enviar mensajes de correo electrónico que aparecía como si fueron enviados por el propietario del buzón.

Muchos clientes de Microsoft Exchange han solicitado que el permiso Enviar como se separen el permiso acceso total al buzón por las dos razones siguientes:
  • Para impedir la falsificación de correo electrónico.
  • Para asegurarse de que el correo electrónico mensajes enviados por un delegado pueden siempre distinguirse claramente de los mensajes de correo electrónico enviados por el propietario real del buzón.
Todas las nuevas versiones del almacén de Exchange requerirán ahora explícitamente el permiso Enviar como para enviar mensajes de correo electrónico como el propietario del buzón. Sin embargo, a continuación, enumeran las tres excepciones a este requisito:
  • La cuenta propietaria del buzón no requiere permisos de enviar como explícitos para su propio buzón.
  • La cuenta externa asociada de un buzón no requiere permisos de enviar como explícitos.
  • Una cuenta delegada que tenga también el permiso acceso total al buzón no requiere permisos de enviar como explícitos.
Para obtener más información acerca de estas excepciones, consulte la sección "Más información".

Solución

Todas las cuentas que se conceden acceso parcial o total a un buzón, excepto los mencionados en la sección "Causa", deben ahora ser concedidas explícitamente el permiso Enviar como para la cuenta propietaria del buzón para poder enviar correo como propietario del buzón. Esto incluye las cuentas de servicio de aplicaciones que realizan funciones como el envío de mensajes de correo electrónico para los usuarios de dispositivos móviles.

El permiso Enviar como se aplica a la identidad de un objeto de usuario de Active Directory, no al contenido de los buzones que se almacenan en una base de datos. Por lo tanto, debe concederse el permiso Enviar como a la cuenta de servicio en cada objeto de usuario que posee un buzón. Cuando se envían mensajes de correo electrónico, no se envían desde una base de datos o un buzón determinado, sino desde un usuario. El usuario puede ser el propietario del buzón o cualquier otra cuenta que tenga el permiso Enviar como.

No se puede conceder el permiso Enviar como en un servidor que ejecuta Exchange Server o en un objeto de base de datos y lograr el efecto de conceder el permiso Enviar como para todos los buzones de la base de datos. Conceder el permiso Enviar como en un objeto de base de datos de Exchange le otorga permiso para la base de datos. El permiso se hereda todos los buzones de la base de datos. Sin embargo, no le otorga permiso a los usuarios que tienen permisos Enviar como y que tienen buzones en la base de datos.

Nota: Conceder el permiso Recibir como en una base de datos de Exchange es el equivalente funcional de conceder el permiso acceso total al buzón para todos los buzones de la base de datos. Esto difiere del comportamiento del permiso Enviar como.

Cómo conceder los permisos Enviar como para una cuenta

Para conceder explícitamente otro permiso de cuenta para enviar como propietario de un buzón, siga estos pasos:
  1. Inicie la consola de administración de Active Directory Users and Computers.
  2. En el menú Ver , asegúrese de que el
    Se selecciona la opción Características avanzadas . Si no se selecciona esta opción, la página seguridad no será visible para los objetos de cuenta de usuario.
  3. Abra las propiedades de la cuenta de usuario que posee el buzón.
  4. Haga clic en la pestaña Seguridad .
  5. Si la cuenta no está en la lista de nombres de usuario o grupos, agregue la cuenta que debe tener el permiso Enviar como para este usuario.
  6. En el cuadro permisos , haga clic en el permiso Permitir el "Enviar como" para la cuenta correspondiente.
  7. Haga clic en Aceptar.
  8. Reinicie el servicio Microsoft Exchange Information Store en el servidor Exchange afectado.
Nota: Si no reinicia el servicio Microsoft Exchange Information Store, el servicio Microsoft Exchange Information Store actualizará su caché de permisos para realizar los nuevos permisos surtan efecto según el valor que se establece en la siguiente subclave del registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\ParametersSystem
Nombre de valor: Mailbox Cache Age Limit
Tipo de valor: REG_DWORD
Radix: Decimal
Datos del valor: el límite de edad de caché de información de buzón en minutos.
El valor predeterminado de esta entrada del registro es de 120 minutos (dos horas). Si modifica esta entrada del registro, debe reiniciar el servicio Microsoft Exchange Information Store.

Nota: Si establece los valores de tiempo de espera en un valor muy bajo, puede afectar al rendimiento del servidor.

Cómo conceder el permiso Enviar como para varias cuentas

Se proporciona un script de ejemplo al final de este artículo que debe buscar un dominio de servicio de Active Directory para las cuentas que tienen el permiso acceso total al buzón sin el permiso Enviar como para un buzón. Estas son las características de una cuenta de servicio o recurso que se verán afectados por este cambio de seguridad. La secuencia de comandos puede generar un archivo de exportación que puede revisar, editar y, a continuación, volver a importar para conceder el permiso Enviar como a cuentas que requieren este permiso.

También puede conceder el permiso Enviar como por herencia a cada objeto de usuario en un dominio de Active Directory o en un contenedor. Si concede el permiso Enviar como mediante este método, puede conceder permisos para objetos que no era su intención. Además, puede perder los permisos para los objetos que se mueven desde el contenedor. Por lo tanto, este método no es el preferido y puede tener implicaciones de seguridad que deben considerarse cuidadosamente antes de implementarlo.

Si concede el permiso Enviar como mediante este método, las cuentas que han heredado el permiso Enviar como serán invisibles para la secuencia de comandos que hace referencia al final del artículo. Para procesar estas cuentas con la secuencia de comandos posteriormente, primero debe quitar el permiso Enviar como heredado.

Para conceder el permiso Enviar como para una única cuenta en todas las cuentas de usuario en un dominio de Active Directory o un contenedor mediante la herencia, siga estos pasos:
  1. Inicie la consola de administración de Active Directory Users and Computers.
  2. En el menú Ver , asegúrese de que el
    Se selecciona la opción Características avanzadas . Si no se selecciona esta opción, la página seguridad no será visible para los objetos de dominio y el contenedor.
  3. Abra las propiedades del dominio o el contenedor y, a continuación, haga clic en la página seguridad.
  4. Haga clic en Avanzadas.
  5. Si la cuenta que necesita permiso ya no aparece, haga clic en Agregary, a continuación, seleccione la cuenta. De lo contrario, haga doble clic en la cuenta para modificarla.
  6. En la lista Aplicar en , haga clic en
    Objetos de usuario.
  7. Conceda a la cuenta el permiso Enviar como.
  8. Haga clic en Aceptar hasta que haya salido y guardado todos los cambios.

Reglas especiales para las cuentas de cuentas protegidas adminSDHolder

Si utiliza la secuencia de comandos para conceder el permiso Enviar como para un propietario de buzón que es también Administrador de dominio, no será efectivo el permiso Enviar como. Se recomienda encarecidamente que se habilite para buzón las cuentas de usuario que tienen derechos de administrador de dominio o que sean cuentas protegidas adminSDHolder.



El objeto adminSDHolder es una plantilla para las cuentas que tienen múltiples derechos administrativos de Active Directory. Para evitar imprevistos de elevación de privilegios, cualquier cuenta que esté protegida por el objeto adminSDHolder debe tener permisos que coincidan con los que aparecen en el propio objeto adminSDHolder .



Si cambia los derechos o los permisos en el objeto adminSDHolder para una cuenta protegida, una tarea en segundo plano deshará el cambio en unos minutos. Por ejemplo, si concede el permiso Enviar como en un objeto de administrador de dominio para una cuenta de servicio de aplicación, la tarea en segundo plano revocará automáticamente el permiso.



Por lo tanto, no puede conceder el permiso Enviar como a una cuenta de servicio de aplicación para una cuenta que esté protegida por el objeto adminSDHolder a menos que cambie el propio objeto adminSDHolder . Si cambia el objeto adminSDHolder , cambiará los permisos de acceso para todas las cuentas protegidas. Sólo debe cambiar el objeto adminSDHolder después de una revisión completa de las implicaciones de seguridad que pueden producirse con el cambio.


Para asociar un buzón con una cuenta que esté protegida por el objeto adminSDHolder , siga estos pasos:
  1. Inicie la consola de administración de Active Directory Users and Computers.
  2. En el menú Ver , asegúrese de que el
    Se selecciona la opción Características avanzadas . Si no se selecciona esta opción, la página seguridad no será visible para los objetos de cuenta de usuario.
  3. Crear una cuenta de usuario normal para que actúe como el propietario del buzón.
  4. Asigne la cuenta de usuario normal un buzón en un servidor de Exchange.
  5. Abra las propiedades de la nueva cuenta propietaria del buzón.
  6. En el cuadro Opciones avanzadas de Exchange , conceda el permiso acceso total al buzón a la cuenta de administrador protegida.
  7. En la página seguridad, conceda el permiso Enviar como a la cuenta de administrador protegida.
  8. Haga clic en Aceptar para salir de las propiedades del objeto propietario del buzón.
  9. Haga clic derecho en el objeto de cuenta del propietario del buzón y, a continuación, haga clic en Deshabilitar cuenta para deshabilitar la cuenta para todos los inicios de sesión.
Para obtener más información acerca de las cuentas protegidas adminSDHolder, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:

907434 el "Enviar como" derecha se quita de un objeto de usuario después de configurar el derecho "Enviar como" en los usuarios de Active Directory y equipos complemento en Exchange Server

318180 el subproceso AdminSDHolder afecta a los miembros transitivos de los grupos de distribución

817433 los permisos delegados no están disponibles y la herencia está deshabilitada automáticamente

306398 objeto AdminSDHolder afecta a la delegación del control de cuentas de administrador pasadas

Tareas especiales para BlackBerry Enterprise Server

Tarea 1: Asegúrese de que BlackBerry Enterprise Server está ejecutándose como una cuenta independiente y única

Asegúrese de que BlackBerry Enterprise Server está ejecutándose como una cuenta independiente creada específicamente para tareas administrativas. De forma predeterminada, esta cuenta se denomina "BESAdmin".

Si tiene una cuenta independiente para administrar BlackBerry Enterprise Server, vaya a la tarea 2.


Si no tiene una cuenta independiente, cree una cuenta independiente. A continuación, utilice esta cuenta para realizar tareas administrativas. Para obtener instrucciones acerca de cómo hacer esto si está ejecutando BlackBerry Enterprise Server 4.0 o BlackBerry Enterprise Server 4.1, consulte a la Guía de instalación de BlackBerry Enterprise Server.  Para obtener instrucciones acerca de cómo hacerlo si está ejecutando BlackBerry Enterprise Server 3.6, consulte la instalación de BlackBerry Enterprise Server 2000/2003 y la Guía de introducción.

Tarea 2: Asegúrese de que la cuenta de servicio de BlackBerry Enterprise Server tiene los permisos adecuados

Compruebe que la cuenta de servicio de BlackBerry Enterprise Server tiene los permisos adecuados.

Nota: Si la cuenta está en un dominio, asegúrese de que la cuenta es miembro del grupo de usuarios del dominio. En un controlador de dominio, la cuenta debe ser miembro del grupo Administradores integrado.
  1. En BlackBerry Enterprise Server, siga estos pasos:
    1. Asegúrese de que la cuenta es miembro del grupo Administradores Local.
    2. Asignar permisos "Inicio de sesión local" e "Iniciar sesión como servicio" a la cuenta.
  2. Permisos de concesión Administrador de sólo vista de Exchange en el nivel de grupo administrativo. Para ello, siga estos pasos:
    1. En el Administrador del sistema de Exchange, haga clic en el primer nombre del grupo administrativo de Exchange Server y, a continuación, haga clic en Delegar Control.
    2. Observe que la cuenta de servicio de BlackBerry Enterprise Server se muestra como que tiene la función de administrador con permiso de vista de Exchange.
  3. Conceder "Enviar como", "Recibir como" y el nivel de permisos "Administrar el almacén de información" en el servidor para cada servidor de Exchange. Para ello, siga estos pasos:
    1. En el Administrador del sistema de Exchange, haga clic en el primer nombre del grupo administrativo de Exchange Server y, a continuación, expanda el
      Grupo de servidores .
    2. (Ratón) en un servidor de Exchange, haga clic en
      Propiedadesy, a continuación, haga clic en
      Seguridad.
    3. En el panel superior, seleccione la cuenta de servicio de BlackBerry Enterprise Server. En el panel inferior, asegúrese de que el "Enviar como", "Recibir como" y "Administrar el almacén de información" permisos se establece en
      Permitir.
    4. Repita los pasos 3b y 3C para cada servidor de Exchange.
  4. Conceder "Enviar como", "Recibir como" y "Administrar el almacén de información" permisos al almacén de buzones. Para ello, siga estos pasos:
    1. En Administrador del sistema de Exchange, haga clic en el primer nombre del grupo administrativo de Exchange y, a continuación, expanda el
      Grupo de servidores .
    2. Expanda el primer grupo de almacén de buzón, haga clic en cada almacén de buzones, haga clic en Propiedadesy, a continuación, haga clic en
      Seguridad.
    3. En el panel superior, seleccione la cuenta de servicio de BlackBerry Enterprise Server. En el panel inferior, asegúrese de que el "Enviar como", "Recibir como" y "Administrar el almacén de información" permisos se establece en
      Permitir.
    4. Repita los pasos 4b y 4c para cada almacén de buzones en cada servidor de Exchange.
  5. En el complemento Usuarios y equipos de usuarios de Active Directory, siga estos pasos:
    1. Haga clic en el usuario que desea agregar permisos para y, a continuación, haga clic en Propiedades.
    2. En la ficha seguridad , agregue la cuenta de servicio de BlackBerry Enterprise Server y, a continuación, haga clic para seleccionar la
      Casilla de verificación Enviar como .
Si no está ejecutando Exchange Server 2003, vea la tarea 3.

Tarea 3: Borrar la caché de BlackBerry Enterprise Server

Para borrar la caché de permisos del almacén de Exchange, reinicie los servicios relacionados con Blackberry y, a continuación, reinicie Microsoft Exchange Information Store. Después de reiniciar el almacén de Exchange, debe reiniciar los servicios relacionados con RIM Blackberry para conceder a la cuenta "BESAdmin" el permiso de enviar como del recién agregado en el almacén de Exchange.

Más información

Los permisos de acceso de carpetas y buzones de Exchange se dividen entre las bases de datos de Active Directory y Microsoft Exchange. Sin embargo, ambos tipos de permisos se establecen en la consola de administración de usuario de Active Directory, pero los permisos diferentes se almacenan en dos ubicaciones diferentes.

Generalmente, si un permiso se define en la página de seguridad para un objeto, es un permiso de Active Directory. Si se establece en la página derechos de buzón avanzados de Exchange, es un permiso de base de datos de Exchange.

El atributo msExchMailboxSecurityDescriptor de Active Directory es una copia de seguridad de un subconjunto de los derechos de buzón efectivos. Se utiliza internamente por Exchange para una variedad de propósitos. Además, el atributo msExchMailboxSecurityDescriptor se actualiza para que coincida con los derechos efectivos actuales si los administradores usan interfaces compatibles para asignar derechos. Sin embargo, si un administrador modifica directamente el atributo msExchMailboxSecurityDescriptor , los cambios no serán propagan al almacén de Exchange y los cambios no surtirán efecto. No se garantiza que se sincronizarán con derechos de buzón reales. No debe utilizar el atributo msExchMailboxSecurityDescriptor para leer o escribir los derechos del buzón.
Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:

310866 cómo establecer derechos de buzón de Exchange Server 2003 y Exchange 2000 Server en un buzón que existe en el almacén de información


El permiso acceso total al buzón es un permiso de almacén de base de datos de Exchange. El permiso Enviar como es un permiso de Active Directory. Antes de Exchange Store.exe cambios en los archivos que se describen en este artículo, el sistema Exchange no consultaba la configuración del permiso Enviar como si el remitente tenía ya el permiso acceso total al buzón.

Inclusión del permiso Enviar como con el permiso acceso total al buzón ha permitido a los administradores de Exchange server para concederse a sí mismos permisos de inicio de enviar como efectivos para cualquier buzón de correo en un servidor que administraran. Al separar el permiso Enviar como del permiso acceso total al buzón, los administradores de Active Directory pueden bloquear ahora este proceso porque el permiso Enviar como es un permiso de Active Directory y no un permiso de almacén de Exchange. Por lo tanto, el proceso no está necesariamente bajo el control de los administradores de Exchange.

Propietarios de buzón

Un propietario de buzón se define como la cuenta de usuario de Active Directory cuyo atributo msExchMailboxGUID lleva el identificador único global (GUID) para un buzón particular. Se permite sólo una cuenta de todo el bosque para llevar el GUID para un buzón particular. Si intenta configurar un segundo propietario con el mismo GUID, Active Directory rechazará el cambio con un error.


Cuando se habilite para buzón una cuenta o cuando conecta un buzón desconectado a una cuenta de Active Directory, el buzón GUID se establece automáticamente en esa cuenta. Rara vez es necesario o recomendable que los administradores configuren GUID de buzón directamente.

Cuentas externas asociadas

Una configuración de Exchange habitual consiste en instalar Exchange en un bosque de recursos. Un bosque de recursos es un bosque en un bosque diferente de las cuentas de usuario que tendrán buzones en el sistema. Esto supone un problema porque sólo se puede establecer el atributo msExchMailboxGUID en objetos en el mismo bosque que el servidor de Exchange.

Habilite para buzón una cuenta en el bosque de Exchange server es la solución a este problema. A continuación, vincular esta cuenta con buzón habilitado a uno en el otro bosque o en un dominio de Microsoft Windows NT 4. Para ello, puede conceder el permiso cuenta externa asociada. Una sola cuenta puede concederse el permiso cuenta externa asociada. La cuenta seleccionada debe ser de un bosque diferente.

Al establecer el permiso cuenta externa asociada, escribe el valor SID de la cuenta externa en el atributo msExchMasterAccountSID del propietario del buzón. Por lo tanto, esto no es un permiso, pero de una forma cómoda de controlar el valor del atributo msExchMasterAccountSID . Después de msExchMasterAccountSID atributo se ha establecido, la cuenta externa que posee el SID se concederá acceso a Exchange como si fuera la cuenta propietaria del buzón.

Nota: Esto se aplica sólo para acceso de Exchange, no a todos los accesos de Active Directory. Además, debe marcar la cuenta propietaria del buzón como deshabilitada para inicios de sesión después de establecer el permiso cuenta externa asociada para que todos los permisos funcionen como se esperaba.

Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:

300456 las delegaciones y permisos del cliente no se mantienen después de haberse asignado en Exchange 2000

Escenarios de delegación

Un delegado es un usuario que se ha concedido acceso parcial a otro buzón y el derecho a enviar mensajes de correo electrónico en nombre del propietario del buzón. Un escenario común de delegación consiste en conceder acceso delegado a un asistente administrativo para el calendario de un ejecutivo. Normalmente, el delegado puede leer y actualizar el calendario. Además, el delegado puede responder a los mensajes de correo electrónico en nombre del ejecutivo.

Puede utilizar las dos interfaces siguientes para conceder el envío en nombre de y delegar permisos:
  • En el objeto propietario del buzón, conceder el permiso Enviar en nombre de las opciones generales de Exchange para el cuadro de diálogo.
  • En Microsoft Office Outlook, utilice el cuadro de diálogo de los delegados .
Ambos métodos establecen el atributo publicDelegates del buzón. Todos los usuarios que aparecen en este atributo tienen el permiso Enviar en nombre del propietario del buzón. Cuando dichos delegados un mensaje de correo electrónico que tiene el nombre del propietario en el cuadro de , el mensaje de correo electrónico se envía desde el delegado y no desde o como el propietario del buzón. Cuadro del mensaje de correo electrónico muestra el siguiente valor:
<Nombre del delegado> nombre <Propietario del buzón>
En algunos casos, no puede establecer el atributo publicDelegates en Outlook.
Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:

329622 el permiso "Enviar en nombre" no está asignado a un usuario después de delegar el acceso en Outlook


Si otorga al delegado acceso a su buzón, el delegado puede utilizar el permiso Enviar en nombre aunque no otorgue acceso a cualquiera de las carpetas del buzón. El permiso fundamental que tiene un delegado es el permiso Enviar en nombre. Permisos de acceso a las carpetas de buzón son independientes y se deben otorgar además de los permisos de delegación. Normalmente, los delegados utilicen Outlook para tener acceso a las carpetas individuales a los que se les ha dado permiso. Para ello, haga clic en Abrir en el menú archivo de Outlook y, a continuación, haga clic en carpeta de otro usuario.

Como alternativa, los delegados pueden abrir su buzón incluyéndolo como un buzón adicional en la
Ficha Opciones avanzadas de sus perfiles de Outlook. Este método hace que su buzón aparezca en el árbol de carpetas de Outlook del delegado. Además, este método permite el acceso a todas las carpetas de su buzón para que un delegado tenga permisos.

Desea que su delegado a veces tienen el permiso Enviar en nombre y otras veces el permiso Enviar como. Para configurar a un delegado con estos dos permisos, siga estos pasos:
  • Conceda al delegado el permiso acceso total al buzón. Esto no es posible a través de Outlook. En su lugar, un administrador de Active Directory debe hacerlo en la cuenta propietaria del buzón. Incluso si concede permisos de propietario en todas las carpetas en el buzón, no es el mismo permiso que el permiso acceso total al buzón.
  • No conceda al delegado el permiso Enviar como. Si concede al delegado el permiso Enviar como, todos los mensajes de correo electrónico que se envían por el delegado se realizará con el permiso Enviar como. El delegado ya no podrá usar el permiso Enviar en nombre.
En esta situación, los delegados que deseen utilizar el permiso Enviar en nombre deberían iniciar sesión en sus buzones. Si los delegados están respondiendo o reenviar un mensaje de correo electrónico ya está en una de sus carpetas, el mensaje de correo electrónico se enviará automáticamente en su nombre. Si los delegados crean un nuevo mensaje de correo electrónico en su nombre, deben escribir su nombre en el cuadro del mensaje de correo electrónico se envíe en su nombre.

Independientemente de si los delegados hayan abierto sus carpetas o todo el buzón como un buzón secundario, todos los mensajes de correo electrónico que envíen desde utilizará el permiso Enviar en nombre siempre y cuando su propio buzón sea el buzón principal para el perfil de Outlook actual.

Cuando los delegados deseen enviar un mensaje de correo electrónico como usted, debe iniciar sesión en su buzón utilizando un perfil de Outlook diferente que solamente abra su buzón. Se enviará automáticamente los mensajes de correo electrónico que envían los delegados mientras están conectados a este perfil del usuario.

Buscar cuentas que tienen el permiso acceso total al buzón sin el permiso Enviar como

La secuencia de comandos de ejemplo que se describe en esta sección puede buscar un dominio de Active Directory cada vez cuentas de usuario donde se concedió el permiso acceso total al buzón para un buzón sin el permiso Enviar como.


Importante: Antes de cambiar los permisos, consulte la sección "acerca de los propietarios de buzón con delegados".

La secuencia de comandos tiene los tres modos siguientes:
  • Exportar Puede generar una lista de usuarios que tienen el permiso acceso total al buzón pero no el permiso Enviar como. A continuación, puede revisar esta lista en el Bloc de notas u otro editor para quitar las cuentas que no desea que tenga el permiso Enviar como.
  • Importación Puede importar una lista de usuarios que tienen el permiso acceso total al buzón, al que también se debe conceder el permiso Enviar como. Tenga en cuenta que no puede utilizar esta secuencia de comandos para conceder el permiso acceso total al buzón y el permiso Enviar como. Cada cuenta debe tener ya el permiso acceso total al buzón para conceder el permiso Enviar como.
  • SetAll Puede conceder el permiso Enviar como a todos los usuarios del dominio que tienen ya el permiso acceso total al buzón para un buzón particular. Se generará un archivo de registro en el mismo formato que el archivo de exportación. Esto equivale a ejecutar los modos de exportación e importación sin modificar el archivo de exportación.
Nota: No hay ninguna función Deshacer en esta secuencia de comandos.

Permisos que se requieren para la secuencia de comandos

Debe ejecutar la secuencia de comandos mientras ha iniciado sesión con una cuenta administrativa que sean del mismo bosque que proceden de las cuentas de propietario de buzón. La secuencia de comandos no funcionen con una cuenta que tenga permisos administrativos entre bosques. La secuencia de comandos también puede no funcionar cuando se ejecuta desde una estación de trabajo que se ha unido a un bosque distinto del bosque al que están unidas las cuentas de propietario de buzón.

Dadas estas condiciones, puede ejecutar la secuencia de comandos con varias cuentas administrativas en una sesión de inicio de sesión único mediante el comando RunAs.exe . Este procedimiento puede resultar útil si segmentó los permisos de Active Directory y Exchange Server, y no hay cuenta única que puede administrar todos los servidores Exchange o todos los dominios de Active Directory. Puede abrir un símbolo del sistema para ejecutar la secuencia de comandos como cada cuenta administrativa. Considere el siguiente ejemplo:
RunAs.exe /user:domain\account CMD.EXE
Nota: No debe ejecutar varias copias de la secuencia de comandos al mismo tiempo contra el mismo dominio.

Los campos del archivo de exportación son los siguientes. Los campos se describen en el orden en que aparecen en el archivo de exportación.
  • Nombre para mostrar de la cuenta propietaria del buzón

    Puede haber más de una línea en el archivo de salida que muestra el mismo propietario del buzón. Este comportamiento se produce si varias cuentas tienen permisos de acceso total al buzón para el mismo buzón.
  • Nombre de inicio de sesión y dominio de una cuenta que tenga los permisos de acceso total al buzón pero no el permiso Enviar como

    La misma cuenta puede aparecer varias veces en el archivo de exportación si la cuenta tiene acceso a varios buzones. Esto suele ser el caso de una cuenta de servicio de aplicación o de una persona que administre varios buzones de recursos.
  • Nombre para mostrar de una cuenta que tenga el permiso acceso total al buzón pero no el permiso Enviar como

    Este campo se proporciona además del campo Nombre de inicio de sesiónpara facilitar la identificación de la cuenta.
  • Estado de delegado del propietario del buzón

    Si el propietario del buzón tiene delegados, el valor del campo es
    Tiene delegados. Si el propietario del buzón no tiene delegados, el valor del campo es Sin delegados.
  • Estado habilitado o deshabilitado de la cuenta propietaria del buzón

    Este campo es útil cuando desea identificar cuentas de recursos o cuentas de buzón entre bosques. Normalmente, estas cuentas están deshabilitadas.
  • Nombre completo de la cuenta propietaria del buzón

    Este campo es útil cuando desea identificar el dominio y el contenedor de la cuenta propietaria del buzón.
  • Nombre completo de la base de datos de buzón del propietario del buzón

    Este campo incluye la base de datos, el grupo de almacenamiento, el servidor y el grupo administrativo para el buzón.
En el ejemplo siguiente, el usuario que tiene el nombre de inicio de sesión "NoEnviarComo" tiene el permiso acceso total al buzón pero no el permiso Enviar como para el buzón "Propietario del buzón":
"" "Propietario del buzón" "" "" "Dominio\NoEnviarComo" "" "" "No enviar como usuario" "" "" "tiene delegados" "" "" "habilitado" "" [campos adicionales omitidos]

Configuración de estación de trabajo administrativa para la secuencia de comandos

Esta secuencia de comandos usa las interfaces de administración de Exchange para comunicarse con servidores de Exchange. Por lo tanto, esta secuencia de comandos debe ejecutarse desde un servidor de Exchange o desde una estación de trabajo al administrador del sistema de Exchange instalado.

Modificar el archivo de exportación

El archivo de exportación tiene formato de texto sin formato para que los juegos de caracteres de varios idiomas se pueden acomodar de Unicode. Algunos editores de texto podrán que no pueda ver o modificar el archivo correctamente o pueden guardar el archivo como texto ANSI o ASCII. La utilidad de Bloc de notas de Microsoft Windows 2000, Windows XP y Windows Server 2003 puede usar correctamente archivos de texto Unicode. Además, Microsoft Office Excel puede usar correctamente archivos de texto Unicode.

El archivo de salida está en un formato delimitado por tabulaciones con comillas triples alrededor de los valores de cada campo. Las comillas triples se utilizan para importar y exportar desde Excel con mayor determinismo. En Excel, las comillas triples se convertirán en comillas simples y volverán a triple entre comillas cuando se guarda el archivo de nuevo como texto Unicode. Vea las instrucciones siguientes para abrir y guardar un archivo de exportación en Excel correctamente.

También puede filtrar un archivo de exportación sin usar Excel mediante la utilidad Find.exe o Findstr.exe. Estas utilidades se incluyen con Windows. Permiten buscar palabras en un archivo y salida sólo las líneas que contienen dichas palabras o sólo las líneas que no contengan esas palabras. Por ejemplo, si desea crear una lista en el archivo de todos los propietarios de buzón con delegados, utilice cualquiera de estos comandos para crear un archivo que sólo contenga líneas con la cadena "Tiene delegados":
Find.exe "tiene delegados" ArchivoOriginal.txt > TieneDelegados.txt

Findstr.exe/c: "tiene delegados" ArchivoOriginal.txt > TieneDelegados.txt
Otro ejemplo: suponga que filtra todos los propietarios de buzón con delegados. El modificador /V muestra todas las líneas que no coinciden con las palabras de búsqueda. Puede utilizar cualquiera de estos comandos para generar un archivo que excluya todas las líneas "Tiene delegados":
Find.exe "Sin delegados" ArchivoOriginal.txt > Sindelegados.txt


Find.exe /V "tiene delegados" ArchivoOriginal.txt > Sindelegados.txt


Findstr.exe/c: "Sin delegados" ArchivoOriginal.txt > Sindelegados.txt


Findstr.exe /V c: "tiene delegados" ArchivoOriginal.txt > Sindelegados.txt
También puede utilizar estos comandos para generar un archivo que enumere todas las cuentas donde una cuenta de servicio de aplicación tiene permiso acceso total al buzón pero no tiene el permiso Enviar como. El modificador /I hace que el comando mayúsculas de minúsculas:
Find.exe /I "domain\ServiceAccount" OriginalFile.txt > ServiceAccount.txt


Findstr.exe /I /C:"domain\ServiceAccount" OriginalFile.txt > ServiceAccount.txt
Nota: Si utiliza la utilidad Find.exe para generar un archivo filtrado, debe quitar las líneas de encabezado que la utilidad Find.exe creará al principio del archivo.

No utilice nombres de archivo comodín (*. *) con la utilidad Findstr.exe. Si utiliza comodines, cada línea en el archivo de salida será precedido por el nombre de archivo. Debe examinar cuidadosamente el archivo de resultados después de filtrar con Find.exe o Findstr.exe para comprobar que el filtro ha obtenido o excluido las cuentas que se pretendía.

En el ejemplo siguiente, el usuario que tiene el nombre de inicio de sesión "NoEnviarComo" tiene el permiso acceso total al buzón pero no el permiso Enviar como para el buzón "Propietario del buzón".
"""Mailbox Owner""" """Domain\NoSendAs""" """No Send As User""" """Has Delegates""" """Enabled""" [additional fields omitted] 

Acerca de los propietarios de buzón con delegados

Un delegado que tiene acceso total al buzón (también denominado "superdelegado") normalmente no debe concederse el permiso Enviar como. Cuando el superdelegado inicia sesión directamente en buzón el buzón del propietario del, el delegado puede enviar como el propietario. Cuando el delegado usa las características de delegación de Outlook (Buzones adicionales para abrir o Abrir carpeta de otro usuario), los mensajes se envían en nombre del propietario.

Conceder el permiso Enviar como a un superdelegado sólo si desea que el delegado siempre enviar como el propietario del buzón y nunca envíe en nombre del propietario del buzón. Le recomendamos que busque el texto "Tiene delegados" en el archivo de exportación y, a continuación, determinar si alguno de los superdelegados que se enumeran son de hecho delegados del propietario del buzón.

Sólo los superdelegados se enumeran en el archivo de exportación. Delegados normales no tienen el permiso acceso total al buzón. Además, cuando concede el permiso Enviar como a un delegado normal, el delegado siempre envía como el propietario del buzón. Esto es cierto aunque el delegado normal no tiene el permiso acceso total al buzón. Si concede permisos Enviar como a un delegado cuando no deseaba, puede revocar fácilmente el permiso más adelante.

Cómo abrir un archivo de exportación en Excel

  1. Inicie Excel antes de abrir el archivo de exportación.
  2. Abra el archivo en Excel como archivos de texto. Inicia el Asistente para importación de texto.
  3. En el Asistente para importación de texto, cambie o acepte los valores siguientes:
    • Tipo de datos original: delimitado
    • Comenzar a importar en la fila: 1
    • Origen del archivo: Unicode (UTF-8)
    • Delimitadores: ficha sólo
    • Considerar separadores consecutivos como uno solo: sin marcar
    • Calificador de texto: "(comillas dobles)

Cómo guardar un archivo de exportación después de modificar el archivo en Excel

  1. En el archivo de exportación, haga clic en Guardar como.
  2. Guarde el archivo con un nombre diferente para que conservar una copia sin modificar del archivo original.
  3. Haga clic en archivo, haga clic en Guardar como, escriba un nombre de archivo para guardar el resultado y, a continuación, haga clic en texto Unicode en la lista Guardar como tipo .

Sintaxis de la secuencia de comandos

Se trata de una secuencia de comandos de modo de texto y debe ejecutarse en una ventana de símbolo del sistema, no desde el cuadro de diálogo Ejecutar . Para abrir una ventana de símbolo del sistema, haga clic en Inicio, haga clic en Ejecutar, tipo
CMD en el cuadro Abrir y, a continuación, haga clic en
OK.

Registro de errores y exportar archivos se guardarán en el directorio actual del símbolo del sistema. Debe tener permisos para crear archivos en este directorio. Para obtener ayuda de línea de comandos, escriba el siguiente comando:
CSCRIPT AddSendAs.vbs 
Para exportar usuarios que tengan acceso total al buzón sin el permiso Enviar como para un dominio, escriba el siguiente comando:
CSCRIPT AddSendAs.vbs [domain controller name] –ExportExample:
CSCRIPT AddSendAs.vbs CORP-DC-1 –Export

El archivo de exportación se generará como "Send_As_Export_H_MM_SS.txt".

Para importar un archivo de exportación modificado, introduzca el siguiente comando:
CSCRIPT AddSendAs.vbs [domain controller name] –Import [filename]

Example:


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

Cómo conceder el permiso Enviar como para cada buzón del dominio para todos los usuarios que tienen ya el permiso acceso total al buzón para un buzón

Nota: Si tiene delegados que también tienen el permiso acceso total al buzón en la organización, no debe utilizar el modo SetAll. Si usa el modo SetAll en esta situación, los delegados se otorgará el permiso Enviar como. Este comportamiento puede hacer que todos los mensajes de correo electrónico que envían usen el permiso Enviar como en lugar del permiso Enviar en nombre. Puede corregir este comportamiento quitando el permiso Enviar como que se concedió erróneamente al delegado:
CSCRIPT AddSendAs.vbs [domain controller name] –SetAll

Example:


CSCRIPT AddSendAs.vbs CORP-DC-1 –SetAll

Si usa el modo SetAll, se generará un archivo de exportación como Send_As_Export_H_MM_SS.txt. Debe guardar este archivo porque es un registro de todas las cuentas que se han cambiado. Si tuviera que ejecutar de nuevo la secuencia de comandos, no produciría la misma lista de cuentas porque las cuentas ya habrían recibidas el permiso Enviar como.


Errores que experimente mientras está ejecutando la secuencia de comandos se guardarán en el archivo Send_As_Errors_H_MM_SS.txt. El nombre del archivo de error coincidirá con la marca de tiempo coincidirá de cualquier archivo de exportación asociado.

Modificaciones de la secuencia de comandos

Puede haber cuentas en su organización que tengan permisos en numerosos objetos, pero no desea modificar los permisos. Para reducir el tamaño del archivo de exportación, puede filtrar estas cuentas modificando la variable FMA_EXCLUSIVE_LIST que se encuentra cerca de la parte superior de la secuencia de comandos. De forma predeterminada, esta variable enumera unas cuentas que se deben suprimir en el resultado de la secuencia de comandos. Puede agregar más cuentas usando el siguiente formato.
& "<Domain\Name>" & OUTPUT_DELIMITER
Por ejemplo, puede cambiar el valor de la variable siguiente.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER
para que aparezca como sigue.
FMA_EXCLUSIVE_LIST = OUTPUT_DELIMITER & "NT AUTHORITY\SELF" & OUTPUT_DELIMITER & "NT AUTHORITY\SYSTEM" & OUTPUT_DELIMITER & "Mydomain\Service1" & OUTPUT DELIMITER
Este cambio suprime el listado de la cuenta "MiDominio\Service1" del archivo de exportación junto con "NT AUTHORITY\SELF" y "NT AUTHORITY\SYSTEM". Observe que el valor dominio\nombre distingue entre mayúsculas y minúsculas y debe aparecer exactamente tal como es o como sería en el archivo de exportación.

Hay otra variable puede editar, FMA_EXCLUSIVE_EXSVC, que tiene el valor predeterminado "\Exchange Services" & OUTPUT_DELIMITER. "Exchange Services" son el nombre de una cuenta que tiene permisos mediante el conector de Active Directory en escenarios de migración y coexistencia de Exchange Server 5.5 y Exchange 2000. Esta cuenta se crea en varios dominios y puede aparecer varias veces en el archivo de exportación si no se suprime.

La variable FMA_EXCLUSIVE_EXSVC sólo acepta una cuenta como su valor. El nombre de cuenta no distingue mayúsculas de minúsculas. La cuenta debe comenzar con un carácter de barra diagonal inversa (\) y no debe incluir el dominio al que pertenece la cuenta. La cuenta se suprimirá para todos los dominios en los que exista.

Si ha utilizado herramientas de migración de terceros o métodos de sincronización de directorios, puede existir una cuenta distinta en varios dominios que tiene permisos concedidos para los buzones de usuario. En este escenario, puede sustituir el nombre de dicha cuenta para "\Exchange Services".

Sugerencias y advertencias

  • Descartar los archivos de registro y de errores generados por la secuencia de comandos. Pueden ser valiosos para solucionar problemas o revertir más tarde los cambios. Recuerde que en cuanto se le ha concedido el permiso Enviar como a una cuenta, ya no se registrará en el archivo de exportación.
  • Si un servidor de Exchange o la base de datos está inactivo, el procesamiento de secuencias de comandos será más lento. En tal caso, puede ordenar el archivo de exportación por bases de datos y mover líneas que están asociadas con una base de datos detenida en un archivo diferente para su posterior importación.
  • La secuencia de comandos suprime el resultado de las cuentas donde el nombre de inicio de sesión termine en "$" o sea NT AUTHORITY\SYSTEM. Estas cuentas del sistema no suelen necesitar el permiso Enviar como, y quitar del archivo de exportación en gran medida reduce su tamaño.
  • El archivo de exportación debe estar en formato Unicode antes de que se pueda importar. Si ha guardado accidentalmente el archivo como texto ANSI, puede resolver este problema cargando el archivo en el Bloc de notas y guardándolo como texto Unicode.
  • Si no funciona una importación, solucionar problemas con las cuentas de prueba y una única línea en el archivo de importación. Debe configurar una cuenta de prueba que tiene un buzón en un servidor de Exchange en ejecución y, a continuación, conceda el permiso acceso total al buzón a otra cuenta de prueba. No conceda el permiso Enviar como a la otra cuenta de prueba.
  • No hay ningún modo de deshacer para esta secuencia de comandos. Para quitar los permisos Enviar como que haya concedido con esta secuencia de comandos, debe generar otra secuencia de comandos o quitarlos manualmente. No se proporciona un modo Deshacer para evitar el uso de esta secuencia de comandos para quitar los permisos Enviar como para todos los usuarios de una organización.
  • La secuencia de comandos no trata correctamente una cuenta que se ha concedido Control total de un objeto de usuario junto con acceso total al buzón. Control total incluye el permiso Enviar como, pero la secuencia de comandos exportará la cuenta como si no tenía el permiso Enviar como. Esto puede aumentar el tamaño del archivo de exportación, pero se produce ningún daño de importar el archivo y, a continuación, redundante conceder permisos Enviar como a dichas cuentas.
  • Cuentas de usuario de Active Directory que tiene nombres completos y que incluyen tabulaciones o comillas dobles no coincidentes no se pueden procesar mediante esta secuencia de comandos. La secuencia de comandos puede procesar correctamente un nombre que incluye comillas dobles coincidentes como el siguiente:
    "CN = nombre"alias"apellido, DC = dominio, DC = com"
  • Cada versión de Excel admite un límite de línea máximo diferente. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

    120596 archivos de texto mayores que 65.536 filas no pueden importarse a Excel 97, Excel 2000, Excel 2002 y Excel 2003

    Los siguientes son los límites de fila para Excel 2003 y Excel 2007:
    • Filas de Excel 2003: 65.536
    • Filas de Excel 2007: 1.048.576
    Si el archivo de resultados es mayor que estos límites, debe dividirlo en secciones antes de cargarlo en Excel.
  • El archivo Send_As_Errors enumerará las cuentas específicas donde hubo un error al leer o escribir permisos. Si otras cuentas del dominio se procesaron correctamente, dichas cuentas pueden tener algo en común que impide que la secuencia de comandos se ejecute con ellas. Problemas comunes incluyen los siguientes:
    • Falta de permisos administrativos para ver o establecer propiedades en las cuentas.
    • El almacén de buzones de Exchange no se está ejecutando.
    • La estación de trabajo no es un miembro del mismo dominio.
    • La cuenta administrativa que se utiliza no es del mismo bosque.
Para ejecutar esta secuencia de comandos, copie y pegue todas las líneas entre BEGIN SCRIPT y END SCRIPT en un editor de texto como el Bloc de notas. Guardar la secuencia de comandos como AddSendAs.vbs. SECUENCIA DE INICIO.
Option Explicit
Dim OUTPUT_DELIMITER
OUTPUT_DELIMITER = """""""" & vbTab & """"""""

'Define exclusive list, if FMA is given to any user in this list, it's ignored. If you
'want to modify this list, please be sure to follow the same format. Every alias has to
'have a OUTPUT_DELIMITER before and after it
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

'Declare ADSI constants
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("WARNING: If you continue, each account in the domain that has")
WScript.StdOut.WriteLine("Full Mailbox Access permission for a given mailbox will also be")
WScript.StdOut.WriteLine("granted permission to Send As the mailbox owner.")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("To preview the list of mailboxes before granting Send As,")
WScript.StdOut.WriteLine("cancel this operation and use the -Export mode of this script.")
WScript.StdOut.WriteLine()
WScript.StdOut.Write("Press Y to continue or any other key to cancel: ")
strInput = WScript.StdIn.ReadLine()
If (UCase(strInput) <> UCase("Y")) Then
WScript.Quit
End If
End If

WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("""!"" indicates an error processing an object.")
WScript.StdOut.WriteLine(" Check " & sErrorsFilename)
WScript.StdOut.WriteLine("Starting...")
WScript.StdOut.WriteLine()

err.Clear
Set rootDSE = GetObject("LDAP://" & sDCServer & "/RootDSE")
sDomainContainer = rootDSE.Get("defaultNamingContext")
WScript.StdOut.WriteLine("Finding domain controller [ " & sDCServer & " ] for domain [ " & sDomainContainer & " ]")

If (err.number <> 0) Then
WScript.StdOut.WriteLine("Failed to find the domain or domain controller, error:" & err.Description)
objfileError.WriteLine("Failed to find the domain or domain controller, error:" & 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("Failed to bind to Active Directory server, error:" & err.Description)
objfileError.WriteLine("Failed to bind to Active Directory server, error:" & err.Description)
WScript.Quit
End If

Set objCommand.ActiveConnection = conn
WScript.StdOut.WriteLine("Searching for mailbox owner user accounts in " & 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("Search for mailbox owners failed, error:" & err.Description)
objfileError.WriteLine("Search for mailbox owners failed, error:" & err.Description)
WScript.Quit
End If

If (rsUsers.RecordCount = 0) Then
WScript.StdOut.WriteLine("No mailbox owner user accounts could be seen in " & sDomainContainer & ".")
objfileError.WriteLine("No mailbox owner user accounts found in " & 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("Error: " & err.Description)
fError = True
fOneError = True
err.Clear
End If
Set objSDMailBox = objUser.MailboxRights
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get mailbox rights: " & rsUsers.Fields(0).Value)
objfileError.WriteLine("Error: " & err.Description)
fError = True
fOneError = True
err.Clear
End If
Set objSDNTsecurity = objUser.ntSecurityDescriptor
If (err.number <> 0) Then
objfileError.WriteLine("Failed to get NTSD: " & rsUsers.Fields(0).Value)
objfileError.WriteLine("Error: " & err.Description)
fError = True
fOneError = True
err.Clear
End If

Set objDACLNTSD = Nothing
If (objUser.AccountDisabled) Then
sMailboxStatus = "Disabled"
Else
sMailboxStatus = "Enabled"
End If

'Query this user's publicDelegates list
err.Clear
msPublicDelegates = objUser.Get("publicDelegates")
If (err.number <> 0) Then
'This user doesn't have publicDelegates list set
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("Error: " & 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("User " & rsUsers.Fields(0).Value & " could not be added to the export file. You should set permissions manually for this user.")
objfileError.WriteLine("Error: " & 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("Error: " & 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("If you continue, each account listed in " & sImportFilePath)
WScript.StdOut.WriteLine("that has Full Mailbox Access permission for a given mailbox")
WScript.StdOut.WriteLine("will also be granted permission to Send As the mailbox owner.")
WScript.StdOut.WriteLine()
WScript.StdOut.Write("Press Y to continue or any other key to cancel: ")
strInput = WScript.StdIn.ReadLine()
If (UCase(strInput) <> UCase("Y")) Then
WScript.Quit
End If
WScript.StdOut.WriteLine("Starting...")
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("Failed to open import file " & sImportFilePath & ", error:" & err.Description)
objfileError.WriteLine("Failed to open import file " & sImportFilePath & ", error:" & 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("Error: " & 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("Failed to update permissions for user: " & UserPath)
objfileError.WriteLine("Error: " & 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("Error: " & 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("Failed to update permissions for user: " & UserPath)
objfileError.WriteLine("Error: " & 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("Finished with one or more errors. See " & sErrorsFilename)
Else
WScript.StdOut.WriteLine("Finished successfully. No errors were encountered.")
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("Could not read permissions for this user: " & sTAlias)
objfileError.WriteLine("Error: " & 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("Unable to create export or error files: " & err.Description)
objfileError.WriteLine("Unable to create export or error files: " & err.Description)
fError = True
fOneError = True
WScript.Quit
End If

End Function

Function DisplaySyntax
WScript.StdOut.WriteLine("Syntax:")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("Export accounts with Full Mailbox Access that do not have Send As permission:")
WScript.StdOut.WriteLine(" CSCRIPT """ & WScript.ScriptName & """ DOMAIN_CONTROLLER -Export")
WScript.StdOut.WriteLine(" NOTE: The list will be saved to Send_As_Export_HH_MM_SS.txt")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("Grant Send As to all accounts listed in an export file:")
WScript.StdOut.WriteLine(" CSCRIPT """ & WScript.ScriptName & """ DOMAIN_CONTROLLER -Import ""filename.txt""")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("Grant Send As to all accounts in the domain with Full Mailbox Access:")
WScript.StdOut.WriteLine(" CSCRIPT """ & WScript.ScriptName & """ DOMAIN_CONTROLLER -SetAll")
WScript.StdOut.WriteLine(" NOTE: Accounts will be listed in Send_As_Export_HH_MM_SS.txt")
WScript.StdOut.WriteLine()
WScript.StdOut.WriteLine("For all modes, errors are saved to Send_As_Errors_HH_MM_SS.txt")

WScript.Quit
End Function
SECUENCIA DE COMANDOS DE FINALIZACIÓN

Microsoft proporciona ejemplos de programación únicamente con fines ilustrativos, sin ninguna garantía expresa o implícita. Esto incluye, pero no se limita, a las garantías implícitas de comerciabilidad o idoneidad para un propósito particular. Este artículo asume que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento. Sin embargo, no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.

Para obtener más información acerca de las opciones de soporte técnico disponibles en Microsoft, visite el siguiente sitio Web de Microsoft:Los productos de terceros que se indican en este artículo están fabricados por compañías independientes de Microsoft. Microsoft no otorga ninguna garantía, implícita o de otro tipo, respecto al rendimiento o confiabilidad de estos productos.
Propiedades

Id. de artículo: 912918 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios