Cómo abordar el horario de verano con la herramienta de actualizar calendario de Exchange

Seleccione idioma Seleccione idioma
Id. de artículo: 930879 - Ver los productos a los que se aplica este artículo
Importante: este artículo contiene información acerca de cómo modificar el Registro. Antes de modificar el Registro, asegúrese de hacer una copia de seguridad del mismo y de que sabe cómo restaurarlo si se produce algún problema. Para obtener más información sobre cómo realizar una copia de seguridad, restaurar y modificar el Registro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
256986 Definición del Registro de Microsoft Windows
Expandir todo | Contraer todo

En esta página

INTRODUCCIÓN

El horario de verano (DST) es un sistema por el que se adelanta la hora para que el amanecer y el atardecer se produzcan en una hora posterior. En consecuencia, por la tarde hay más tiempo de luz. Muchos países implementan el horario de verano, aunque la mayoría reglamenta a su manera cuándo empieza y termina. Las fechas de horario de verano (también denominado DST) pueden cambiar de un año para el siguiente y los usuarios tienen que actualizar el calendario de Microsoft Office Outlook cada vez que cambian las normas de horario de verano. En el presente artículo, a las fechas transcurridas entre las normas de horario de verano anteriores y las actuales se las denomina "período de ampliación de DST".

Este artículo se centra en las medidas que puede tomar para ajustar los elementos del calendario de Microsoft Outlook que tienen lugar durante este período.

Para obtener más información acerca de cómo preparar todos los productos de Microsoft afectados para los cambios del horario de verano en 2007 (DST 2007), visite el siguiente sitio Web de Microsoft:
http://www.microsoft.com/DST2007
Este artículo se centra en las medidas que se deberían tomar para actualizar los elementos del calendario almacenados en Microsoft Exchange Server según las nuevas normas del horario de verano. La solución que se presenta en este artículo incluye el uso de la herramienta de actualizar calendario de Exchange ("la herramienta de Exchange"). La herramienta de Exchange se basa en la herramienta de actualizar datos de zona horaria de Microsoft Office Outlook ("la herramienta de Outlook").
Para obtener información adicional acerca de la herramienta de Outlook, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
931667 Cómo abordar los cambios de horario de verano en 2007 con la herramienta de actualizar datos de zona horaria para Microsoft Office Outlook

Acerca de la herramienta de Exchange

Después de instalar las actualizaciones de horario de verano para Microsoft Windows, todas las citas anteriores que aparecen durante los períodos de cambio de horario de verano se muestran incorrectamente una hora después. Esto se cumple tanto para las citas periódicas como para las que sólo tienen lugar una vez. Estas citas deben actualizarse para que se muestren correctamente en Outlook, Outlook Web Access y en las aplicaciones basadas en CDO.

Outlook proporciona una herramienta que se denomina Actualizar datos de zona horaria de Microsoft Office Outlook. Esta herramienta permite a los usuarios actualizar sus propios calendarios.

Nota: la herramienta de actualizar datos de zona horaria está integrada en Microsoft Office Outlook 2007. Sin embargo, recomendamos que utilice la versión independiente de esta herramienta.
931667 Cómo abordar los cambios de horario de verano en 2007 con la herramienta de actualizar datos de zona horaria para Microsoft Office Outlook
La herramienta de actualizar calendario de Exchange ("la herramienta de Exchange") permite evitar los desafíos que implica distribuir ampliamente la herramienta de Outlook a todos los usuarios y permite asegurarse de que cada usuario ejecute correctamente la herramienta.

Descripción de alto nivel de la herramienta de Exchange

La herramienta de Exchange consta de dos archivos ejecutables independientes. Estos archivos se describen en la tabla siguiente.
Contraer esta tablaAmpliar esta tabla
Nombre de archivoDescripción
Msextmz.exeEste programa ejecutable extrae información de zona horaria de los buzones en un servidor que ejecuta Exchange Server. También actualiza los calendarios del buzón de una lista especificada de usuarios y llama a la herramienta de Outlook para cada usuario especificado.
Msextmzcfg.exeEste programa ejecutable es una herramienta de configuración que realiza la mayoría de los pasos necesarios para actualizar un servidor de Exchange Server.

Versión 2 de la herramienta de Exchange

La versión 2 de la herramienta de actualizar calendario de Exchange se publicó el 21 de febrero de 2007. En este artículo se hace referencia a la versión 2 de la herramienta de Exchange. Si utiliza la versión 1 de la herramienta de Exchange, desinstálela e instale la versión 2. La versión 2 de la herramienta de Exchange incluye las mejoras siguientes:
  • El rendimiento de la versión 2 es dos veces más rápido que el de la versión 1 al ejecutar la herramienta en modo de actualización.
  • La interfaz de usuario se ha mejorado.
  • Se ha corregido la pérdida de memoria que requería el reinicio frecuente de los equipos cliente.
  • Se ha incluido un algoritmo mejorado para asignar las zonas horarias extraídas a la zona horaria del sistema operativo.

Riesgos y limitaciones de ejecutar la herramienta de Exchange

Hay dos aspectos que deben tenerse en cuenta antes de ejecutar la herramienta de Exchange. En la tabla siguiente se muestran estos aspectos, sus efectos potenciales en la infraestructura de IT y en los usuarios y sus estrategias de mitigación.
Contraer esta tablaAmpliar esta tabla
Riesgo EfectoMitigación
Hay muchas actualizaciones de reuniones.Disminuye el rendimiento del servidor y la red.Determine cuál puede ser el efecto en el rendimiento del servidor y la red actualizando primero un lote pequeño de usuarios. Si la carga es perturbadora, ejecute la herramienta durante las horas de poca actividad o durante las horas de mantenimiento.
Lleva demasiado tiempo ejecutar la herramienta.MSXTMZ.exe es de subproceso único. Si ejecuta este archivo en modo de actualización contra varios miles de usuarios al mismo tiempo, la herramienta de Exchange puede tardar muchas horas o, posiblemente, días en finalizar. Para acelerar el proceso de actualización de todos los buzones, divida a los usuarios en lotes y, a continuación, actualice cada lote de usuarios con una instancia independiente de MSXTMZ.exe en un equipo independiente.

Opciones para actualizar los buzones

En la tabla siguiente se muestran cinco opciones que pueden utilizarse para actualizar los buzones de usuario con el fin de aplicar las normas de zona horaria de DST 2007.
Contraer esta tablaAmpliar esta tabla
OpciónVentajasInconvenientes
Distribuir la herramienta de Outlook a cada usuario y, a continuación, indicar a los usuarios que actualicen sus propios buzones.Esta opción evita los riesgos y limitaciones de ejecutar la herramienta de Exchange.Es difícil garantizar que todos los usuarios ejecutarán la herramienta de Outlook de forma correcta y oportuna. Los usuarios que no tengan Outlook no podrán ejecutar la herramienta de Outlook. Se necesita un esfuerzo de formación adicional para disminuir la confusión de los usuarios.
Ejecutar la herramienta de Exchange contra todos los usuarios y servidores afectados.Esta opción proporciona una experiencia simplificada para los usuarios.Hay problemas asociados a ejecutar la herramienta de Exchange, como se describe en la tabla anterior.
Ejecutar la herramienta de Exchange y actualizar sólo las citas periódicas. Permita a los usuarios actualizar las citas que sólo tienen lugar una vez en sus propios buzones mediante la herramienta de Outlook.La actualización incorrecta de este tipo de citas implica menos riesgos.Los inconvenientes de ejecutar la herramienta de Outlook se unen a los de ejecutar la herramienta de Exchange.
No ejecutar la herramienta de Exchange ni la de Outlook. Pida a los usuarios que examinen sus calendarios y vuelvan a anotar las citas como sea necesario.Esta opción evita los problemas de ejecutar la herramienta de Exchange.A menos que todos los usuarios vuelvan a escribir todas las citas afectadas, algunos elementos estarán retrasados una hora durante el período adicional DST. Se necesita un esfuerzo de formación adicional para disminuir la confusión de los usuarios.
Distribuir la herramienta de Outlook a cada usuario y, a continuación, indicar a los usuarios que actualicen sus propios buzones. A continuación, utilice el modo de extracción de zona horaria de la herramienta de Exchange para determinar si los usuarios han ejecutado la herramienta de Outlook. Si no la han ejecutado, el administrador puede ejecutar la herramienta de Exchange.Esta opción reduce el riesgo de que los usuarios no ejecuten la herramienta a tiempo y evita los problemas de ejecutar la herramienta de Exchange.Ésta opción no es válida si los usuarios ejecutan Outlook 2007.

Cómo instalar la herramienta de Exchange

La herramienta de actualizar calendario de Exchange está disponible en forma de archivo ejecutable autoextraíble Msextmz.exe.

Después de la instalación, los archivos del directorio de instalación deben incluir los archivos siguientes:
  • Msextmz.exe
  • Msextmzcfg.exe
  • Msextmz.ini

    Éste es el archivo .ini principal que documenta todos los parámetros utilizados por Msextmz.exe.
  • Msextmzcfg.xml

    Éste es el archivo de asignación de zona horaria que asigna las zonas horarias de Outlook, CDO y Outlook Web Access a las zonas horarias del sistema operativo.

Los archivos siguientes pueden descargarse desde el Centro de descarga de Microsoft:
Contraer esta imagenAmpliar esta imagen
Descargar
Descargue ahora el paquete de la herramienta de actualizar calendario de Exchange.

Se ha creado una máquina virtual para ayudar con la instalación y uso de la herramienta de actualizar calendario de Exchange. La máquina virtual se basa en Microsoft Windows Server 2003, Microsoft Office Outlook 2007, Microsoft Office Excel 2007 y Microsoft Office Word 2007. La máquina virtual funciona en Virtual PC 2004 y en Virtual Server 2005 R2.

Para obtener más información acerca de la máquina virtual para la herramienta de actualizar calendario de Exchange, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
933185 Hay una máquina virtual que le ayuda a implementar las actualizaciones del calendario con los cambios del horario de verano de 2007 en una organización Exchange
Para obtener más información acerca de cómo descargar los archivos de soporte técnico de Microsoft, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
119591 Cómo obtener Archivos de soporte técnico de Microsoft desde los servicios en línea
Microsoft exploró este archivo en busca de virus con el software de detección de virus más reciente disponible en la fecha de publicación. Asimismo, el archivo se almacenó en servidores seguros que ayudan a impedir la realización de cambios no autorizados.

Idiomas admitidos por la herramienta de Exchange

La herramienta de Exchange sólo está disponible en inglés. La herramienta sólo se ejecutará en un equipo inglés (EE.UU.).

Versiones de Exchange Server compatibles con la herramienta de Exchange

La herramienta de Exchange puede actualizar los buzones en las versiones siguientes de Exchange Server:
  • Microsoft Exchange Server 2007 Enterprise Edition
  • Microsoft Exchange Server 2007
  • Microsoft Exchange Server 2007 Standard Edition
  • Microsoft Exchange Server 2003
  • Microsoft Exchange Server 2003 Enterprise Edition
  • Microsoft Exchange 2000 Server
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange 2000 Server Enterprise Edition
  • Microsoft Exchange 2000 Server Standard Edition

Sistemas operativos compatibles con la herramienta de Exchange

La herramienta de Exchange se ejecutará en los sistemas operativos siguientes:
  • Microsoft Windows Server 2003
  • Microsoft Windows XP
  • Microsoft Windows 2000
No se admite Windows Vista.

Qué hacer antes de ejecutar la herramienta de Exchange

Instale las actualizaciones

Antes de ejecutar la herramienta de Exchange, asegúrese de que los equipos servidor y cliente están correctamente actualizados de la forma siguiente:
  1. Instale la actualización de horario de verano de Windows en los equipos cliente y servidor. Para obtener más información acerca de cómo actualizar un equipo que ejecuta el sistema operativo Windows, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    931836 Paquete acumulativo de actualizaciones de febrero de 2007 para los sistemas operativos Microsoft Windows
  2. Para Exchange 2003 Service Pack 2, instale la actualización siguiente que sea pertinente para su organización:
    • 911829 Recibe un mensaje de error al intentar realizar tareas de edición o debe hacer clic en el marco de composición en Outlook Web Access
    • 924334 El formulario Redactar mensaje deja de responder después de instalar Internet Explorer 7.0 y el control S/MIME en un cliente Outlook Web Access de Exchange Server 2003
    Nota: este paso puede completarse al mismo tiempo que el paso 1.

Comprobar los requisitos del sistema

La herramienta de Exchange debe ejecutarse en un equipo que tenga instalado Microsoft Office Outlook 2003 o Microsoft Office Outlook 2007, así como la herramienta de datos de zona horaria de Outlook. Además, Microsoft .NET Framework versión 2.0 debe estar instalado en el equipo cliente.

Outlook y la herramienta de actualizar datos de zona horaria de Microsoft Office Outlook no forman parte del paquete de descarga de herramientas de Exchange. Tienen que instalarse independientemente.

Nota: no confunda el paquete de instalador de la herramienta de Outlook que se denomina Tzmove.exe con el archivo ejecutable de la herramienta de Outlook real, que también se denomina Tzmove.exe.

Para ejecutar correctamente la herramienta de Exchange, el equipo no debe tener establecido el valor del Registro PickLogonProfile. Opcionalmente, este valor del Registro debe establecerse en 0. Para determinar si este valor del Registro existe, siga estos pasos.

Advertencia: pueden producirse problemas graves si modifica incorrectamente el Registro mediante el Editor del Registro o con cualquier otro método. Estos problemas pueden requerir que reinstale el sistema operativo. Microsoft no puede garantizar la solución de esos problemas. Modifique el Registro bajo su responsabilidad.
  1. Haga clic en Inicio y en Ejecutar, escriba regedit y haga clic en Aceptar.
  2. Expanda la siguiente subclave:
    HKEY_CURRENT_USER\Software\Microsoft\Exchange\client\options\
  3. Haga clic en options y, a continuación, determine si el valor PickLogonProfile existe. Si el valor PickLogonProfile existe y está establecido en 1, establézcalo en 0. Para ello, siga estos pasos:
    1. Haga clic con el botón secundario en PickLogonProfile y, a continuación, haga clic en Modificar.
    2. En el cuadro Información del valor, escriba 0 y, después, haga clic en Aceptar.
La herramienta de Exchange no puede ejecutarse en un equipo con Exchange Server o con las herramientas de administración del sistema de Exchange. Si intenta instalar la herramienta de Exchange en un equipo con Exchange Server o con las herramientas de administración del sistema de Exchange, recibe el mensaje de error siguiente:
Microsoft Exchange Calendar Update Tool cannot be installed with Microsoft Exchange (La herramienta de actualizar calendario de Microsoft Exchange no puede instalarse con Microsoft Exchange)

Configurar manualmente y ejecutar Msextmz.exe

Configure el archivo Msextmz.ini

El archivo Msextmz.ini debe configurarse correctamente para que Msextmz.exe se ejecute correctamente. Recomendamos que lea atentamente los comentarios del archivo Msextmz.ini antes de modificar el archivo Msextmz.ini.

Especifique el modo de ejecución de Msextmz.exe

Msextmz.exe se ejecuta en dos modos. Para especificar el modo de ejecución, tienen que establecerse parámetros concretos en el archivo Msextmz.ini. En la lista siguiente se describen los dos modos y cómo configurarlos en el archivo Msextmz.ini.
  • Extracción de zona horaria

    En este modo, Msextmz.exe lee un conjunto de propiedades MAPI para extraer información de la zona horaria de cada buzón.

    Msextmz.exe puede examinar las citas periódicas organizadas por el usuario en su calendario y, a continuación, intenta determinar la zona horaria del usuario. Sin embargo, esta opción hace un uso intensivo de los recursos. Por consiguiente, esta opción no está habilitada de forma predeterminada. Para habilitar esta opción, establezca el parámetro ReadCalendarTimezones en el archivo Msextmz.ini.

    Msextmz.exe registra la información de zona horaria de cada usuario en un archivo de salida que contiene una lista de nombres completos de buzón heredados. Cada nombre completo de buzón heredado tiene los tipos siguientes de valores de zona horaria:
    • Zona horaria de Outlook Web Access
    • Zona horaria de CDO
    • Zona horaria de Outlook
    • Zona horaria de reuniones periódicas
    El formato del archivo es el siguiente:
    NombreCompletoUsuario<\TAB >ZonaHorariaCDO<\TAB>ZonaHorariaOutlook Web Access<\TAB>ZonaHorariaOutlook<\TAB >ZonaHorariaReuniónPeriódica<\CRLF>
    Si Msextmz.exe no puede extraer la información de zona horaria para cualquiera de los cuatro tipos de zonas horarias, el nombre completo de buzón heredado se registrará en el archivo de errores.

    Para asignar al usuario a sólo una zona horaria, debe importar el archivo de salida a Microsoft Excel. En Excel, filtre la lista de usuarios según una de las zonas horarias. La zona horaria que debe utilizar depende de su entorno.

    Por ejemplo, si la mayoría de los usuarios utilizan dispositivos BlackBerry, Exchange 5.5 Outlook Web Access u otras soluciones basadas en CDO, filtre la lista por zona horaria de CDO. Si la mayoría de los usuarios utilizan Outlook Web Access de Exchange, filtre la lista por zona horaria de Outlook Web Access. Si la mayoría de los usuarios no se ajustan a uno de estos escenarios, filtre la lista por zona horaria de reuniones periódicas.

    Para ejecutar la herramienta en modo de extracción de zona horaria, configure el archivo .ini como sigue:
    • Deje el parámetro CommandLine sin comentarios.
    • Establezca el parámetro OutputFile.
    • Establezca el parámetro ErrorFile.
    • Establezca el parámetro ServerDN.
    • Establezca el parámetro Profile.
    • Establezca el parámetro LogFile.
    • Establezca el parámetro ExportTimezones en 1.
    • Ponga como comentarios, o quite, el resto de los parámetros del archivo .ini.
  • Actualización

    En este modo, Msextmz.exe actualiza todos los buzones especificados en un archivo de entrada. El archivo de entrada debería tener el formato siguiente:
    NombreCompletoUsuario<\TAB>NombreDescriptivoServidor<\TAB>ClaveRegistroZonaHorariaSO<\CRLF>
    Sólo puede ejecutarse una instancia de Msextmz.exe a la vez en un cliente. Sin embargo, Msextmz.ini puede ejecutarse al mismo tiempo en varios clientes.

    Para ejecutar Msextmz.exe en este modo, debe configurar el archivo Msextmz.ini de la forma siguiente:
    • Asegúrese de que el parámetro CommandLine no tiene comentarios y señala a la ubicación correcta de Tzmove.exe.
    • Establezca el parámetro InputFile.
    • Ponga como comentario, o quite, el parámetro OutputFile.
    • Establezca el parámetro ErrorFile.
    • Establezca el parámetro ServerDN.
    • Establezca el parámetro LogFile.
    • Establezca el parámetro LogDirectory.
    • Ponga como comentario, o quite, el parámetro ExportTimezones.
    • Quite los comentarios de los parámetros restantes.
    En el modo de actualización, Msextmz.exe puede aceptar un archivo de entrada que contenga usuarios en diferentes servidores de Exchange. La configuración de .ini requiere que se proporcione el nombre completo de un servidor de Exchange. En este caso, sólo hay que especificar un nombre completo de un servidor de Exchange en la organización de Exchange.

    Para actualizar sólo las citas periódicas, configure el parámetro CommandLine con el valor siguiente:
    tzmove.exe /q /onlyrecurring
    Para actualizar tanto las citas periódicas como las que tienen lugar una sola vez, utilice el valor CommandLine predeterminado.

Configure los permisos para Msextmz.exe

Los permisos que se exigen para ejecutar Msextmz.exe dependen del modo de ejecución que se utilice. En la tabla siguiente se muestran los permisos necesarios para cada modo de ejecución.
Contraer esta tablaAmpliar esta tabla
Modo de ejecuciónPermisos
Extracción de zona horariaAdministrador con permiso de vista de Exchange
Administrador local del equipo que ejecuta Msextmz.exe
ActualizaciónUsuario del dominio que tiene los permisos Acceso total al buzón y Enviar como en todos los buzones
Administrador local del equipo que ejecuta Msextmz.exe

Secuencia de comandos "Conceder permiso de buzón"

Puede utilizar la secuencia de comandos de ejemplo GrantMailboxPermission.vbs para conceder a un usuario del dominio acceso completo al buzón y derechos de envío a todos los buzones.

Sólo un administrador de Exchange puede ejecutar esta secuencia de comandos en un equipo que ejecuta Exchange 2000 Server o Exchange Server 2003. Esta secuencia de comandos no puede ejecutarse en un equipo con Exchange Server 2007. Sin embargo, puede utilizarse el shell de administración de Exchange para conceder los permisos necesarios.

El código para la secuencia de comandos de VBS se proporciona en la sección "Referencias". En la tabla siguiente se describen los dos modos en los que se ejecuta esta secuencia de comandos.
Contraer esta tablaAmpliar esta tabla
ModoLínea de comandosDescripción
AgregarCScript GrantMailboxPermission.vbs ?add NombreDominio\NombreUsuario NombreArchivoConcede a NombreDominio\NombreUsuario los permisos Acceso total al buzón y Enviar como para los buzones de usuario enumerados en el archivo de entrada. El archivo de entrada debe ser un archivo de texto que contiene los nombres completos heredados de los buzones de usuario delimitados por CRLF.

La secuencia de comandos genera un archivo GrantMailboxPermission.log. Este archivo contiene un registro de los buzones que se procesaron. La primera línea del archivo de registro es el NombreDominio\NombreUsuario a quien se concede el acceso. No elimine este archivo. Se utiliza en el modo Quitar.

Si se ha denegado explícitamente el acceso al usuario, la secuencia de comandos registra la información en un archivo denominado "GrantMailboxPermission.err". La secuencia de comandos no concede ni cambia los permisos.

Si el usuario forma parte de un grupo de seguridad al que se ha denegado el acceso, la secuencia de comandos concede acceso completo al buzón y permisos de envío. Sin embargo, el usuario no podrá iniciar sesión en el buzón. Todos los errores se registran en el archivo GrantMailboxPermission.err.
QuitarCScript GrantMailboxPermission.vbs ?removeQuita los permisos Acceso total al buzón y Enviar como de los buzones que se muestran en el archivo GrantMailboxPermission.log de NombreDominio\NombreUsuario. NombreDominio\NombreUsuario se especifica en el archivo GrantMailboxPermission.log.
Nota: cuando ejecute esta secuencia de comandos en el equipo que ejecuta Exchange Server, la secuencia de comandos devuelve un punto (.) cuando procesa correctamente un usuario. La secuencia de comandos devuelve un signo de exclamación (!) si no procesa correctamente un usuario.

Nota: el archivo de salida del modo de extracción de zona horaria no se puede utilizar como archivo de entrada para esta secuencia de comandos. Para crear el archivo de entrada para esta secuencia de comandos, puede pegar el contenido del archivo de salida de extracción de zona horaria en el Bloc de notas, guardar el contenido como un nuevo documento y, a continuación, utilizar el nuevo documento como archivo de entrada.

Cómo registrar los trabajos en modo de actualización

Registros de la herramienta de actualizar datos de zona horaria de Outlook

Cuando se ejecuta la herramienta de Outlook, crea un archivo de registro en el directorio temp. Este archivo se denomina "Outlook Time Zone Update.log". Msextmz.exe extrae la información de "Outlook Time Zone Update.log" y, a continuación, crea los archivos de registro por cada usuario en el directorio especificado en el parámetro LogDirectory del archivo .ini.

A estos archivos se les asigna un nombre con el formato siguiente:
MSExTmz-CN de usuario del nombre completo de usuario-número aleatorio.LOG
Por ejemplo, la herramienta de Outlook registra la información siguiente:
MSExTmz-USER3-0x0131273E.LOG
La herramienta de Outlook hace esto cuando procesa a un usuario que tiene el nombre completo siguiente:
/O=FIRST ORGANIZATION/OU=FIRST ADMINISTRATIVE GROUP/CN=RECIPIENTS/CN=USER3

Archivo de error

Si Msextmz.exe no puede ejecutar la herramienta de Outlook contra cualquier buzón, el nombre completo del usuario se graba en el archivo de errores. Msextmz.exe no graba nada en el archivo de errores si la herramienta de Outlook se ejecutó correctamente.

Archivo de registro

Si se configura la opción Archivo de registro en el archivo Msextmz.ini, la información de salida de Msextmz.exe en la ventana de símbolo del sistema también está disponible en el archivo especificado.

Ejecutar Msextmzcfg.exe

Msextmzcfg.exe automatiza el proceso de extraer zonas horarias, resolver las zonas horarias de cada usuario y generar las listas de usuarios y los archivos .ini necesarios para ejecutar Msextmzcfg.exe en modo de actualización. Recomendamos que utilice Msextmzcfg.exe para realizar estos pasos en lugar de realizarlos manualmente. En esta sección se describe cómo ejecutar Msextmzcfg.exe.

Permisos que se requieren

La cuenta que se utiliza para ejecutar Msextmzcfg.exe debe tener los permisos siguientes en el cliente:
  • Administrador con permiso de vista de Exchange
  • Administrador local

Ejemplo del proceso de actualizar un servidor de Exchange Server con Msextmzcfg.exe

  1. En el equipo cliente, cree un perfil de Outlook que inicie sesión en un buzón que resida en el servidor Exchange que intenta actualizar. Asegúrese de que el perfil está en modo En línea, y, a continuación, configure este perfil como predeterminado.

    Nota: el servidor de Exchange debe admitir el modo en línea.
  2. Ejecute Msextmzcfg.exe para iniciar la herramienta de Exchange.
  3. En la página uno del Asistente para actualizar calendario de Exchange, finalice uno de los procedimientos siguientes:

    Para extraer la zona horaria de todos los buzones en un servidor de Exchange, siga estos pasos:
    1. En el cuadro Nombre de servidor, escriba el nombre descriptivo o el nombre de dominio completo (FQDN) del servidor de Exchange. Si el nombre descriptivo contiene un punto (.), utilice en su lugar el nombre NetBIOS. Se produce un error en Msextmzcfg.exe si el servidor está en otro bosque de Active Directory.
    2. En el cuadro Output File From Extraction (Archivo de salida de extracción), escriba el nombre del archivo que contendrá toda la información de zona horaria del buzón.
    3. Si desea extraer las zonas horarias para las reuniones periódicas, haga clic para activar la casilla de verificación Extract Recurring Meeting Time Zones (Extraer zonas horarias de reuniones periódicas).

      Importante: si utiliza esta configuración, aumentará significativamente el tiempo de ejecución del modo de extracción. Esta casilla de verificación está desactivada de forma predeterminada.
    4. Haga clic en la lista Nombre perfil Outlook y, a continuación, haga clic en el perfil que creó en el paso 1.
    5. Haga clic en Next (Siguiente).


    Para omitir la extracción de zona horaria, siga estos pasos:
    1. Haga clic para activar la casilla de verificación Skip time zone extraction (Omitir extracción de zona horaria). Esta casilla de verificación está desactivada de forma predeterminada.
    2. En el cuadro Output File From Extraction, escriba el nombre de un archivo de salida de una extracción de zona horaria anterior.
    3. En el cuadro Nombre de servidor, escriba el nombre descriptivo o el nombre completo del servidor de Exchange que se utilizó para generar el archivo de salida que especificó en el paso 3b.
    4. Haga clic en Next.
  4. Después de finalizar la extracción de zona horaria, Msextmzcfg.exe analiza el archivo de salida e intenta asignar las zonas horarias de los buzones de usuario a las zonas horarias actuales del sistema operativo.

    Si alguna zona horaria no coincide, debe asignarse manualmente en la página Map Time Zone (Asignar zona horaria). Para ello, haga clic en la zona horaria de Windows que coincide con la zona horaria del usuario en la lista Windows Time Zone (Zona horaria de Windows) y, a continuación, haga clic en Next.
  5. Cuando el proceso de asignación ha finalizado, Msextmzcfg.exe clasifica a los usuarios en los grupos siguientes:
    • Usuarios que sólo tienen una zona horaria (por ejemplo, los que tienen la zona horaria de CDO, Outlook Web Access, Outlook o reunión periódica) o usuarios que tienen varias zonas horarias que se asignan a la misma zona horaria del sistema operativo
    • Usuarios que tienen varias zonas horarias que se asignan a zonas horarias de sistema operativo diferentes
    • Usuarios que no tienen información de zona horaria
    Msextmzcfg.exe permite guardar la lista de usuarios "en conflicto" y "no existentes" en archivos de texto independientes. Para ello, siga estos pasos:
    1. En el área Users with conflicting time zone information (Usuarios con información de zona horaria en conflicto), escriba ConflictUsers.txt en el cuadro Output File (Archivo de salida).
    2. En el área Users with no time zone information (Usuarios sin información de zona horaria), escriba NonExistent.txt en el cuadro Output File.
  6. En la página Calendar update configuration (Configuración de actualización de calendario), proporcione la información que se requiere para generar los archivos de entrada de la lista de usuarios, los archivos .ini y los archivos de proceso por lotes con los que se actualizarán los buzones. Para ello, siga estos pasos:
    1. En la lista Select time zones that need to be updated (Seleccione las zonas horarias que deben actualizarse), haga clic para activar la casilla de verificación de las zonas horarias que desee actualizar.
    2. En el cuadro Number of Batch Files (Número de archivos por lotes), escriba el número de lotes de usuarios que desea generar.

      Esta información es útil si desea acelerar el tiempo de ejecución de actualización. Puede hacer esto si divide una lista grande de usuarios en lotes más pequeños y, después, ejecuta varias instancias de Msextmz.exe en modo de actualización. Haga esto en equipos independientes y ejecute cada instancia de Msextmz.exe para procesar un lote independiente de usuarios.

      Nota: no puede ejecutar varias instancias de Msextmz.exe en el mismo equipo cliente.
    3. En el cuadro Tzmove.exe path (Ruta de acceso de Tzmove.exe), escriba la ruta de acceso de la herramienta de Outlook y sus parámetros. Si desea sólo actualizar las reuniones periódicas, haga clic para activar la casilla de verificación Recurring meetings only (Sólo reuniones periódicas).
    4. En el cuadro Post Mailbox Delay (seconds) (Retardo de buzón de envío [en segundos]), escriba el número de segundos que desea retrasar la creación de perfiles entre dos actualizaciones de los buzones. Se recomienda que utilice el valor predeterminado de 0 segundos.
    5. En el cuadro Per Mailbox Timeout (minutes) (Por fin de tiempo de espera del buzón [minutos]), escriba el número de minutos que desea que la herramienta de Outlook espere antes de que finalice el tiempo de espera. Se recomienda que utilice el valor predeterminado de 15 minutos.
  7. Haga clic en Finish (Finalizar). Msextmzcfg.exe genera un subdirectorio bajo el directorio de ejecución actual. El nombre del subdirectorio es el nombre descriptivo del servidor de Exchange. El subdirectorio contiene los archivos siguientes:
    • MSExTmz_x.ini

      Éste es el archivo .ini que Msextmz.exe utiliza para ejecutarse en modo de actualización. x es un marcador de posición para el número de lote.
    • Mailboxes_x.txt

      Éste es el archivo de entrada de la lista de usuarios que Msextmzcfg.exe utiliza para ejecutarse en modo de actualización. x es un marcador de posición para el número de lote.
    • MSExTmz_x.bat

      Éste es el archivo de proceso por lotes que ejecuta Msextmzcfg.exe en modo de actualización contra los usuarios especificados en el archivo Mailboxes_x.txt.
    • NonExistent.txt

      Este archivo contiene la lista de usuarios que no tienen información de zona horaria en su buzón.
    • ConflictUsers.txt

      Este archivo contiene la lista de usuarios que tienen conflictos de zona horaria.
  8. Busque el subdirectorio que tiene el mismo nombre que el servidor, abra el archivo Mailboxes_x.txt en el Bloc de notas, quite cualquier entrada de recurso o buzón del sistema y, a continuación, guarde el archivo Mailboxes_x.txt.
  9. Siga estos pasos:
    1. Inicie Outlook y, a continuación, compruebe que Outlook inicia sesión correctamente en el servidor utilizando el perfil predeterminado y no le solicita que seleccione un perfil.
    2. Compruebe que no aparece ningún mensaje durante el inicio de Outlook. Msextmz.exe no puede ejecutarse si aparecen mensajes.
    3. Compruebe que no existe el archivo siguiente:
      %USERPROFILE%\Configuración local\Datos de programa\Microsoft\Outlook\Extend.dat
      Si el archivo existe, cámbiele el nombre.
    Actualice los buzones; para ello, vaya al subdirectorio que tiene el mismo nombre que el servidor y ejecute uno por uno los archivos de proceso por lotes. Para ejecutar correctamente los archivos de proceso por lotes, debe utilizar una cuenta que tenga acceso completo al buzón y derechos de envío a los buzones que desea actualizar.

Qué hacer después de ejecutar la herramienta de Exchange

Instalar las actualizaciones

Después de terminar de actualizar todos los servidores de Exchange del entorno, instale la actualización siguiente en los servidores de Exchange:
926666 Actualizar los cambios del horario de verano de 2007 para Exchange 2003 Service Pack 2

Problemas conocidos

  • La herramienta de Exchange no actualiza las reuniones periódicas que se crean en Outlook Web Access

    Si instala la actualización que se menciona en el artículo 926666 de Knowledge Base en el servidor de Exchange antes de actualizar los buzones, la herramienta de Exchange no actualiza las reuniones periódicas que se crean en Outlook Web Access. Para resolver este problema, quite la actualización 926666, ejecute la herramienta de Exchange y, a continuación, reinstale la actualización 926666 en el servidor de Exchange.
  • Exchange 2007 debe reiniciarse después de ejecutar la herramienta de Exchange

    Para que Exchange 2007 Outlook Web Access muestre correctamente los elementos del calendario después de ejecutar la herramienta de Exchange, deben reiniciarse los servicios de Exchange.
  • No puede instalar la herramienta de Exchange

    La herramienta de Exchange no se instala correctamente si existe alguna de las siguientes claves del Registro:
    • HKEY_CLASS_ROOT\Outlook.Application.9
    • HKEY_CLASS_ROOT\Outlook.Application.10
    En este caso, recibe el mensaje de error siguiente al intentar instalar la herramienta de Exchange:
    Exchange Server Calendar Rebasing Tool cannot be installed with this version of Microsoft Outlook (La herramienta de actualizar calendario de Exchange Server no puede instalarse con esta versión de Microsoft Outlook).
    Para evitar este problema, elimine estas claves del Registro, instale la herramienta de Exchange y, a continuación, restaure las claves del Registro.
  • Una zona horaria puede ser ambigua

    La herramienta de Outlook no actualiza elementos periódicos del calendario creados con las normas de DST 2006 en la zona horaria del Pacífico (PST) en Outlook 2003 o en una versión anterior de Outlook. Este problema afecta a Msextmz.exe porque ejecuta la herramienta de Outlook.

    Para evitar este problema, quite del Registro las zonas horarias mexicanas en el equipo que ejecuta Msextmz.exe. Ejecute Msextmzcfg.exe en modo de actualización y, a continuación, restaure las zonas horarias mexicanas en el Registro. Para ello, siga estos pasos.

    Advertencia: pueden producirse problemas graves si modifica incorrectamente el Registro mediante el Editor del Registro o con cualquier otro método. Estos problemas pueden requerir que reinstale el sistema operativo. Microsoft no puede garantizar la solución de esos problemas. Modifique el Registro bajo su responsabilidad.
    1. Realice una copia de seguridad del Registro.
    2. Haga clic en Inicio y en Ejecutar, escriba regedit y haga clic en Aceptar.
    3. Expanda la siguiente subclave:
      HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones
    4. Haga clic con el botón secundario en Hora estándar de México y, a continuación, haga clic en Eliminar.
    5. En el cuadro de diálogo Confirmar la eliminación de clave, haga clic en .
    6. Haga clic con el botón secundario en Hora estándar de México 2 y, a continuación, haga clic en Eliminar.
    7. En el cuadro de diálogo Confirmar la eliminación de clave, haga clic en .
    8. Ejecute Msextmzcfg.exe en modo de actualización.
    9. Restaure el Registro a partir de la copia de seguridad que creó en el paso 1.
    Para obtener más información acerca de cómo realizar una copia de seguridad y restaurar el Registro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    256986 Definición del Registro de Microsoft Windows
  • Hay un límite en cuanto al número de buzones que pueden procesarse por servidor

    En el modo de lista de usuarios y en el modo de extracción de zona horaria, Msextmz.exe puede procesar sólo 65.535 buzones en un servidor. Si el servidor tiene más de 65.535 buzones, algunos no se procesarán.
  • Puede haber conflictos con las asignaciones de salas de conferencias

    Al utilizar la herramienta de Outlook, las reuniones se mueven a la hora correcta. Sin embargo, esto puede producir conflictos con las asignaciones de salas de conferencias.

    Si ejecuta Exchange Server 2007, se recomienda que establezca el límite de conflictos en el Operador de reserva de recursos de Exchange 2007 en 3. Una vez actualizados todos los buzones, los conflictos se resolverán automáticamente.

    Si utiliza la reserva directa o el Agente de aceptación automática, realice los pasos siguientes para actualizar los buzones de recursos:

    Para la reserva directa

    Nota: los pasos siguientes requieren que descargue la última revisión para la herramienta de actualizar datos de zona horaria de Microsoft Office Outlook (Tzmove.exe).
    1. Ejecute Tzmove.exe (la herramienta de Outlook) con el parámetro de línea de comandos /FORCEREBASESUPPRESSALLUPDATES contra los buzones de recursos.
    2. Ejecute Tzmove.exe en modo normal contra todos los demás buzones.
    Una vez finalizada la actualización, si utiliza Outlook para iniciar sesión en los buzones de recursos y leer las actualizaciones que se enviaron en el paso 2, las actualizaciones de reuniones aparecen como "provisional" en el calendario del buzón de recursos. Si nadie inicia sesión en el buzón de recursos, las peticiones de reunión originales que se actualizaron en el paso 1 aparecerán como "aceptado" en el calendario del buzón de recursos.

    Para obtener más información acerca de FORCEREBASESUPPRESSALLUPDATES, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    933146 Descripción de la revisión de la herramienta de actualizar datos de zona horaria para Microsoft Office Outlook


    Para el Agente de aceptación automática
    1. Compruebe que el Agente de aceptación automática se está ejecutando actualmente en el servidor.
    2. Instale la actualización del horario de verano en el equipo cliente.
    3. Ejecute Tzmove.exe (la herramienta de Outlook) con el parámetro de línea de comandos /FORCEREBASESUPPRESSALLUPDATES contra los buzones de recursos que tengan habilitado el Agente de aceptación automática.
    4. Compruebe de nuevo que se está ejecutando el Agente de aceptación automática. Esto es importante para asegurarse de que los usuarios recibirán el correo de aceptación para las reuniones actualizadas que organizaron.
    5. Ejecute Tzmove.exe en modo normal contra todos los demás buzones.
  • Calendarios de carpetas públicas

    La herramienta de Exchange no actualiza los calendarios de las carpetas públicas. Para obtener información acerca de cómo actualizar un calendario de carpeta pública, vea la documentación de la herramienta de Outlook.
  • Debe utilizar "Run As" en la línea de comandos

    Si va a ejecutar Msextmz.exe mediante "Run As" en la línea de comandos, asegúrese de que también utiliza "Run As" al configurar el Editor del Registro para establecer el valor PickLogonProfile en el Registro.
  • Msextmz.exe puede dejar de responder

    Algún problema con los servidores de catálogo global puede hacer que Msextmz.exe deje de responder. Si ocurre esto, siga estos pasos:
    1. Detenga Msextmz.exe.
    2. Si el parámetro Logfile se estableció en Msextmz.ini, averigüe qué buzón se estaba procesando. La entrada Processing Mailbox (Procesando buzón) del archivo de registro proporciona el nombre completo de usuario del buzón que se estaba procesando cuando Msextmz.exe dejó de responder.

      Si el parámetro Logfile no se estableció en Msextmz.ini, la información de Processing Mailbox (Procesando buzón) puede encontrarse en la ventana de símbolo del sistema.

      No se procesa ninguno de los buzones de usuario que están detrás del buzón que se estaba procesando cuando Msextmz.exe dejó de responder. Esto se aplica a los buzones de ServerName_TimeZone_Input_File.txt que se utilizó como archivo de entrada para la ejecución.
    3. Cree un nuevo archivo de entrada que contenga el nombre completo de usuario de los buzones que no se procesaron.
    4. Antes de ejecutar de nuevo Msextmz.exe con este nuevo archivo de entrada, asegúrese de procesar los usuarios en el archivo de error que se generó en la ejecución anterior.
  • Puede ejecutar la herramienta de Outlook y la herramienta de Exchange en el mismo entorno

    Puede ejecutar la herramienta de Outlook y la herramienta de Exchange en el mismo entorno. Si ejecuta la herramienta de Exchange en un buzón ya actualizado por la herramienta de Outlook, o viceversa, no experimentará ningún efecto secundario. Sin embargo, si el administrador ejecuta la herramienta de Exchange, no hay necesidad de que los usuarios ejecuten independientemente la herramienta de Outlook.
  • Los avisos aparecen después de lo esperado

    Los avisos que no son para reuniones de los buzones actualizados por la herramienta de Exchange no se actualizan si Outlook nunca se ha conectado al buzón en modo En línea. En esta situación, los avisos aparecerán una hora después de lo esperado.

    Si Outlook nunca se ha conectado en modo En línea, debe ajustar los avisos incorrectos para las citas del calendario que encuentre la herramienta de actualizar zona horaria de Outlook. Si Outlook nunca se ha conectado en modo En línea, los avisos buscan carpetas que no existen en el buzón. Por consiguiente la herramienta no actualiza los elementos de correo electrónico, contactos u otros avisos. Por ejemplo, la herramienta no actualizará un aviso en un elemento de correo electrónico para el seguimiento en un momento posterior o un aviso en un elemento de tarea que tiene un aviso.
  • El tiempo de ejecución puede ser prolongado

    Msextmz.exe es de subproceso único. Por consiguiente, podría llevar muchas horas ejecutar la herramienta contra muchos buzones.

    Como referencia, Microsoft IT pudo actualizar aproximadamente 53.000 buzones en 16 horas mediante nueve clientes. Esto es igual a una tasa de actualización de 6,13 buzones por minuto por cada cliente.

    El número de invitados a una solicitud de reunión no debería afectar al tiempo de ejecución del modo de actualización. Esto se debe a que, desde el punto de vista del cliente, enviar una actualización de reunión a un destinatario lleva el mismo tiempo que enviar una actualización de reunión a cien destinatarios.

    El número de invitados afecta al número de copias de la actualización de la reunión. Sin embargo, éste es un problema de flujo del correo, no de tiempo de ejecución.
  • El registro de eventos puede quedarse sin espacio después de actualizar muchos buzones

    Tzmove.exe genera un evento informativo que incluye el origen TZMOVE EventID 32 para cada actualización correcta. Si se produce una gran cantidad de eventos, el registro de la aplicación puede exceder el espacio asignado en disco. En modo de actualización, Msextmz.exe se basa en estos eventos para determinar la ejecución correcta de Tzmove.exe. Si Msextmz.exe no puede encontrar el evento Tzmove.exe correspondiente asociado al buzón que intenta actualizar, supone que la actualización fue incorrecta. Por consiguiente, registra el nombre completo del buzón en el archivo error.txt. Para evitar este problema, recomendamos que establezca el tamaño del registro de eventos en el máximo y que permita sobrescribir.
  • "No se puede realizar la instalación porque se detectaron versiones anteriores de la "Herramienta de actualizar calendario de Microsoft Exchange. Desinstálela y vuelva a ejecutar la instalación."

    Si instaló previamente la versión 1.0 de la herramienta de actualizar calendario de Exchange, debe desinstalarla antes de instalar la versión 2.0. La versión 1.0 se distribuyó como un programa ejecutable autoextraíble que contenía dos paquetes MSI: Msextmz.msi y Msextmzcfg.msi. Debe desinstalar ambos paquetes antes de instalar la versión 2.0. Si sigue encontrando problemas al instalar la versión 2.0, intente volver a instalar y desinstalar la versión 1.0 con los paquetes *.msi en lugar de utilizar la herramienta Agregar o quitar programas. A continuación, reinicie el equipo e instale la versión 2.0. Si todo lo demás no funciona, extraiga directamente los archivos binarios de los paquetes *.msi.

Mensajes de error y resoluciones

  • No se encuentra la zona horaria del buzón:error 0x80004005
    Un mensaje de error similar a éste puede deberse a cualquiera de los problemas siguientes:
    • La herramienta no pudo buscar valores de zona horaria en el buzón de ese usuario concreto. Para resolver este problema, intente agregar "ReadCalendarTimeZones=1" (sin las comillas tipográficas) al archivo Msextmz.ini con el fin de obligar a la herramienta a examinar los elementos periódicos del calendario para obtener información de la zona horaria. Puede crear un nuevo archivo de entrada mediante los nombres completos del registro de errores que recibió en la última ejecución.
    • Está haciendo referencia a Tzmove.exe desde el directorio equivocado. Para resolver este problema, extraiga el archivo de instalación descargado en la carpeta donde reside Msextmz o actualice Msextmz.ini para incluir la ruta de acceso completa donde está instalado Tzmove.exe en la estación de trabajo que utiliza.

      Nota: al descargar la herramienta de actualizar datos de zona horaria para Microsoft Office Outlook, el archivo Tzmove.exe es el instalador de la herramienta real. Las referencias al instalador producen errores al ejecutar Msextmz.
    • La cuenta que utiliza para ejecutar Msextmz no dispone de permisos totales para el buzón y no tiene delegados los permisos correctos de Exchange. Para resolver este problema, ejecute la secuencia de comandos "Conceder permiso de buzón" desde un equipo con Exchange Server.
  • No se puede procesar el buzón /O=CONTOSO/OU=PRIMER GRUPO ADMINISTRATIVO/CN=DESTINATARIOS/CN=TESTMB01 - 0x80004005
    Revise cuidadosamente legacyExchangeDN y realice cualquier corrección necesaria. Para asegurarse de que el valor es preciso, utilice ADSIEdit para copiar y pegar el valor.
  • No se puede abrir la tabla de buzón del servidor /O=CompanyRoot/ OU=IT/cn=Configuration/cn=Servers/cn=EXCH01. Error 80040115
    Éste es un error de RPC. Revise cuidadosamente legacyExchangeDN y realice cualquier corrección necesaria.
    Seleccione el servidor válido
    Necesita el nombre completo (DN) del servidor. El nombre completo debería ser similar al siguiente:
    ServerDN:/O=CompanyRoot/OU=IT/cn=Configuration/cn=Servers/cn=EXCH01
  • La aplicación no se pudo inicializar correctamente (0xc0000135). Haga clic en Aceptar para terminar la aplicación
    Puede producirse un mensaje de error similar a éste porque .NET Framework 2.0 no está instalado.
  • HrTestMailboxAccess:no se puede abrir el buzón - 0x8004011D.
    Si recibe este un mensaje de error similar a éste durante la operación de actualización, la cuenta que está utilizando no tiene acceso total al buzón. Para poder actualizar los buzones, la cuenta correspondiente a la herramienta debe tener permisos de Acceso total al buzón en todos los buzones.

    Compruebe que se han concedido los permisos correctos mediante el método que se describe en la sección "Configurar los permisos para Msextmz.exe".

Referencias

Secuencia de comandos "Conceder permiso de buzón"

Option Explicit ' For FileSystemObject Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 Const TristateTrue = -1 Const TristateUseDefault = -2 Const TristateFalse = 0

'Permission Type: Allow or Deny Const ADS_ACETYPE_ACCESS_ALLOWED = &H0 Const ADS_ACETYPE_ACCESS_DENIED = &H1 Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5 Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6

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_SCOPE_SUBTREE = 2 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

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

'Application Parameter Index Const ARG_INDEX_MODE = 0 Const ARG_INDEX_USERNAME = 1 Const ARG_INDEX_FILENAME = 2 Const MIN_ARG = 1

Const MODE_INVALID = -1 Const MODE_ADD = 0 Const MODE_REMOVE = 1

Const ADD = "-ADD" Const REMOVE = "-REMOVE"

'Application Const String Const EMPTYSTRING = "" Const ERROR_FILENAME = "GrantMailboxPermission.err" Const OUTPUT_FILENAME = "GrantMailboxPermission.log" Dim OUTPUT_DELIMITER OUTPUT_DELIMITER = vbTab

'Logging file Dim objFSO Dim objfileError Dim objfileOutput Dim objfileImport Dim objconn Dim objCommand Dim rootDSE Dim sDomainContainer Dim sUserLDAPPath Dim objUser Dim objSDNTsecurity Dim objDACLNT Dim objDACLEX Dim objSDMailbox Dim fFMA Dim fSendAs Dim AccessTypeForFMA Dim AccessTypeForSendAS Dim fAddedFMA Dim fAddedSendAs Dim fRemovedFMA Dim fRemovedSendAs Dim sArraySplit Dim sOneRow Dim sGrantedUser Dim dArgCount Dim cScriptMode Dim dArgExpected Dim fOneError

On Error Resume Next 'Parameter Checking dArgCount = Wscript.Arguments.Count If (dArgCount < MIN_ARG) Then DisplaySyntax End If

cScriptMode = MODE_INVALID Select Case UCase(WScript.Arguments(ARG_INDEX_MODE)) Case ADD cScriptMode = MODE_ADD dArgExpected = ARG_INDEX_FILENAME + 1 Case REMOVE cScriptMode = MODE_REMOVE dArgExpected = ARG_INDEX_MODE + 1 Case Else cScriptMode = MODE_INVALID End Select

If (cScriptMode = MODE_INVALID Or dArgCount <> dArgExpected) Then DisplaySyntax End If

If (cScriptMode = MODE_ADD) Then sGrantedUser = WScript.Arguments(ARG_INDEX_USERNAME) If (IsValidUserName(sGrantedUser) = False) Then DisplaySyntax End If End If

CreateImportExportFiles

If (cScriptMode = MODE_ADD) Then err.Clear
	
	'Prepare LDAP connection Set objconn = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objconn.Provider = "ADSDSOObject" objconn.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 rootDSE = GetObject("LDAP://rootDSE") sDomainContainer = rootDSE.Get("defaultNamingContext") If (err.number <> 0) Then WScript.StdOut.WriteLine("Failed to find a Domain Container:" & err.Description) objfileError.WriteLine("Failed to find a Domain Container:" & err.Description) WScript.Quit End If
		
	Set objCommand.ActiveConnection = objconn

	Do While objfileImport.AtEndOfStream <> True fOneError = False sUserLDAPPath = EMPTYSTRING err.Clear

		sOneRow = Trim(objfileImport.ReadLine) If sOneRow <> EMPTYSTRING Then
		
		    sUserLDAPPath = GetLDAPPathFromLegacyDN(sOneRow) If (err.number <> 0) Then objfileError.WriteLine("Failed to get user's LDAP path from " & sOneRow) fOneError = True err.Clear End If

		    If (fOneError = False) Then Set objUser = GetObject(sUserLDAPPath) If (err.number <> 0) Then objfileError.WriteLine("Failed to get user object from " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True err.Clear End If End If
    	
		    If (fOneError = False) Then Set objSDMailBox = objUser.MailboxRights Set objDACLEX = objSDMailbox.DiscretionaryAcl Set objSDNTsecurity = objUser.ntSecurityDescriptor Set objDACLNT = objSDNTsecurity.DiscretionaryAcl If (err.number <> 0) Then objfileError.WriteLine("Failed to get DACL of " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True err.Clear End If End If

		    ' Check Full Mailbox Access and Send As permission fFMA = False fSendAs = False AccessTypeForFMA = ADS_ACETYPE_ACCESS_ALLOWED AccessTypeForSendAS = ADS_ACETYPE_ACCESS_ALLOWED

		    If (fOneError = False) Then CheckFullMailboxAccess objDACLEX, sGrantedUser, fFMA, AccessTypeForFMA CheckSendAs objDACLNT, sGrantedUser, fSendAs, AccessTypeForSendAS If (err.number <> 0) Then objfileError.WriteLine("Failed to Check permission of " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True err.Clear End If End If

		    'If we don't have either SendAS or FMA, we're going to add these permission If ( (AccessTypeForFMA = ADS_ACETYPE_ACCESS_DENIED) Or (AccessTypeForSendAs = ADS_ACETYPE_ACCESS_DENIED_OBJECT) ) Then 'Deny access already granted, won't add permission to this user objfileError.WriteLine("Deny permission already added: " & sUserLDAPPath) fOneError = True End If
    		
		    If ( fOneError = False And ((fFMA = False) Or (fSendAs = False)) ) Then fAddedFMA = False fAddedSendAs = False
    			
			    If (fFMA = False) Then 'Add FMA permission err.Clear AddAce objDACLEX, sGrantedUser, EX_FULLMAILBOX_ACCESSMASK, ADS_ACETYPE_ACCESS_ALLOWED, ADS_ACEFLAG_INHERIT_ACE, 0,0,0 objSDMailbox.DiscretionaryAcl = objDACLEX objUser.MailboxRights = Array(objSDMailbox) If ( err.number <> 0 ) Then objfileError.WriteLine("Failed to add FullMailbox Access: " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True fAddedFMA = False err.Clear Else fAddedFMA = True End If End If
    			
			    If (fSendAs = False) Then 'Add SendAs permission err.Clear AddAce objDACLNT, sGrantedUser, EX_MB_SEND_AS_ACCESSMASK, ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, 0,1, EX_MB_SEND_AS_GUID, 0 objSDNTsecurity.DiscretionaryAcl = objDACLNT objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity ) objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL If ( err.number <> 0 ) Then objfileError.WriteLine("Failed to add SendAs permission: " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True fAddedSendAs = False err.Clear Else fAddedSendAs = True End If End If

			    If (fOneError = False ) Then objUser.SetInfo If (err.number <> 0) Then objfileError.WriteLine("Failed to update user: " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True err.Clear Else 'Update Logging objfileOutput.WriteLine(sUserLDAPPath & OUTPUT_DELIMITER & fAddedFMA & OUTPUT_DELIMITER & fAddedSendAs) End If End If End If

		    Set objUser = Nothing Set objSDNTsecurity = Nothing Set objDACLNT = Nothing Set objDACLEX = Nothing Set objSDMailBox = Nothing

		    If (fOneError = True) Then WScript.StdOut.Write("!") Else WScript.StdOut.Write(".") End If End If Loop

Set rootDSE = Nothing Set objCommand = Nothing Set objconn = Nothing

End If

If (cScriptMode = MODE_REMOVE) Then 'Retreive the granted user from the first line of import file sGrantedUser = objfileImport.ReadLine If (IsValidUserName(sGrantedUser) = False) Then WScript.StdOut.WriteLine("Invalid User in import file. please check import file..") objfileError.WriteLine("Invalid User in import file. please check import file..") WScript.Quit End If
	
	Do While objfileImport.AtEndOfStream <> True fOneError = False sUserLDAPPath = EMPTYSTRING fAddedFMA = False fAddedSendAs = False fRemovedFMA = False fRemovedSendAs = False err.Clear

		sOneRow = objfileImport.ReadLine sArraySplit = Split(sOneRow, OUTPUT_DELIMITER)

		'First column is Ldap path sUserLDAPPath = sArraySplit(0) 'Second column is FullMailbox Permission fAddedFMA = sArraySplit(1) 'Third column is SendAs fAddedSendAs = sArraySplit(2)

		Set objUser = GetObject(sUserLDAPPath) If (err.number <> 0) Then objfileError.WriteLine("Failed to get user object from " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True err.Clear End If
		
		If ((fOneError = False) And (fAddedFMA = "True")) Then Set objSDMailBox = objUser.MailboxRights Set objDACLEX = objSDMailbox.DiscretionaryAcl fRemovedFMA = RemoveFullMailboxAccess(objDACLEX, sGrantedUser) If (err.number <> 0) Then objfileError.WriteLine("Failed to Remove Full MailboxAccess from " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True err.Clear End If
			
			If (fRemovedFMA = False) Then objfileError.WriteLine("Couldn't find Full mailbox access permission on " & sUserLDAPPath) End If
			
			If ((fOneError = False) And (fRemovedFMA = True)) Then objSDMailbox.DiscretionaryAcl = objDACLEX objUser.MailboxRights = Array(objSDMailbox) End If End If

		If ((fOneError = False) And (fAddedSendAs = "True")) Then Set objSDNTsecurity = objUser.ntSecurityDescriptor Set objDACLNT = objSDNTsecurity.DiscretionaryAcl

			fRemovedSendAs = RemoveSendAs(objDACLNT, sGrantedUser) If (err.number <> 0) Then objfileError.WriteLine("Failed to Remove SendAs from " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True err.Clear End If

			If (fRemovedSendAs = False) Then objfileError.WriteLine("Couldn't find SendAs permission on " & sUserLDAPPath) End If
			
			If ((fOneError = False) And (fRemovedSendAs = True)) Then objSDNTsecurity.DiscretionaryAcl = objDACLNT objUser.Put "ntSecurityDescriptor", Array( objSDNTsecurity ) objUser.SetOption ADS_OPTION_SECURITY_MASK, ADS_SECURITY_INFO_DACL End If End If

		If ((fOneError = False) And (fRemovedFMA Or fRemovedSendAs)) Then objUser.SetInfo If (err.number <> 0) Then objfileError.WriteLine("Failed to update ADSI for user: " & sUserLDAPPath) objfileError.WriteLine("Error: " & err.Description) fOneError = True err.Clear Else If ( fRemovedFMA Or fRemovedSendAs ) Then 'Update Logging objfileError.WriteLine("Removed Permission from " & sUserLDAPPath & OUTPUT_DELIMITER & fRemovedFMA & OUTPUT_DELIMITER & fRemovedSendAs) End If End If End If

		If (fOneError = True) Then WScript.StdOut.Write("!") Else WScript.StdOut.Write(".") End If Loop End If

CloseImportexportFiles

Function IsValidUserName (sUserName) Dim dPosition dPosition = InStr(1, sUserName, "\") If (dPosition = 0 ) Then IsValidUserName = False objfileError.WriteLine("Invalid User:" & sUserName) Else IsValidUserName = True End If End Function

Function CheckSendAs (objNTSD, sUser, fSendAs, AccessType) Dim intACECount Dim objACE
	
	err.Clear fSendAs = False AccessType = ADS_ACETYPE_ACCESS_ALLOWED intACECount = objNTSD.AceCount

	If intACECount Then For Each objACE In objNTSD err.Clear If ( (UCase(objACE.Trustee) = UCase(sUser)) And (objACE.ObjectType = EX_MB_SEND_AS_GUID) ) Then fSendAs = True AccessType = objACE.AceType End If Next End If	

	If (err.number <> 0) Then objfileError.WriteLine("Check SendAs permissions Failed : " & sUser) objfileError.WriteLine("Error: " & err.Description) err.Clear fOneError = True End If Set objACE = Nothing End Function

Function CheckFullMailboxAccess (objACL, sUser, fFoundFMA, AccessType) Dim intACECount Dim objACE

	err.Clear fFoundFMA = False AccessType = ADS_ACETYPE_ACCESS_ALLOWED intACECount = objACL.AceCount If intACECount Then For Each objACE In objACL If ( (UCase(objACE.Trustee) = UCase(sUser)) And ((objACE.AccessMask And EX_FULLMAILBOX_ACCESSMASK) <> 0)) Then fFoundFMA = True AccessType = objACE.AceType End If Next End If

	If (err.number <> 0) Then objfileError.WriteLine("Check FullMailbox permissions Failed : " & sUser) objfileError.WriteLine("Error: " & err.Description) err.Clear fOneError = True End If Set ObjACE = Nothing End Function

Function RemoveSendAs (objNTSD, sUser) Dim intACECount Dim objACE Dim fFound
	
	fFound = False intACECount = objNTSD.AceCount
	
	If intACECount Then For Each objACE In objNTSD If ((UCase(objACE.Trustee) = UCase(sUser)) And (objACE.ObjectType = EX_MB_SEND_AS_GUID) ) Then objNTSD.RemoveAce objACE fFound = True End If Next End If

	RemoveSendAs = fFound End Function

Function RemoveFullMailboxAccess (objACL, sUser) Dim intACECount Dim objACE Dim fFound
	
	fFound = False intACECount = objACL.AceCount
	
	If intACECount Then For Each objACE In objACL If((0 <> Instr(UCase(objACE.Trustee), UCase(sUser))) And (objACE.AccessMask And EX_FULLMAILBOX_ACCESSMASK) <> 0) Then objACE.AccessMask = (objACE.AccessMask Xor EX_FULLMAILBOX_ACCESSMASK) fFound = True End If Next End If

	RemoveFullMailboxAccess = fFound End Function

Function GetLDAPPathFromLegacyDN (sLegacyDN) Dim rsUsers Dim sLdapPath
	
	objCommand.CommandText = "<GC://" & sDomainContainer & ">;(&(&(& (mailnickname=*) (| (&(objectCategory=person)(objectClass=user)(legacyExchangeDN=" & sLegacyDN & ")) ))));adspath;subtree" objCommand.Properties("searchscope") = ADS_SCOPE_SUBTREE objCommand.Properties("Page Size") = 10 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 objfileError.WriteLine("Search for mailbox owners failed, error:" & err.Description) fOneError = True End If
	
	If (rsUsers.RecordCount = 0) Then objfileError.WriteLine("No mailbox owner user accounts found for " & sLegacyDN & " in " & sDomainContainer & ".") fOneError = True End If

	If (rsUsers.RecordCount > 1) Then objfileError.WriteLine("Multiple mailboxs owner user accounts found for " & sLegacyDN & " in " & sDomainContainer & ".") fOneError = True End If

	sLdapPath = Replace(rsUsers.Fields(0).Value, "GC://", "LDAP://") GetLDAPPathFromLegacyDN = sLdapPath Set rsUsers = Nothing End Function

Function CloseImportexportFiles

	objfileError.WriteLine("*******************************************************") objfileError.WriteLine("End at " & Date & " " & Time) objfileError.WriteLine("*******************************************************")

	objFSO.Close objfileError.Close objfileOutput.Close objfileImport.Close
	
	Set objFSO = Nothing Set objfileError = Nothing Set objfileOutput = Nothing Set objfileImport = Nothing End Function

Function CreateImportExportFiles Dim sErrorsFileName Dim sImportFileName Dim sOutputFileName

	err.Clear Set objFSO = CreateObject("Scripting.FileSystemObject") sErrorsFileName = ERROR_FILENAME sImportFileName = EMPTYSTRING sOutputFileName = EMPTYSTRING

	Select Case cScriptMode Case MODE_ADD sImportFileName = WScript.Arguments(ARG_INDEX_FILENAME) sOutputFileName = OUTPUT_FILENAME Case MODE_REMOVE sImportFileName = OUTPUT_FILENAME 'Use output file name as import file sOutputFileName = EMPTYSTRING Case Else DisplaySyntax End Select

	Set objfileError = objFSO.OpenTextFile(sErrorsFileName, ForAppending, True, TristateTrue) objfileError.WriteLine("*******************************************************") objfileError.WriteLine("Start at " & Date & " " & Time) objfileError.WriteLine("*******************************************************")

	If (cScriptMode = MODE_REMOVE) Then Set objfileImport = objFSO.OpenTextFile(sImportFileName, ForReading, False, TristateTrue) Else Set objfileImport = objFSO.OpenTextFile(sImportFileName, ForReading, False, TristateFalse) End If

	If (sOutputFileName <> EMPTYSTRING) Then 'Check if output file already exists. If (objFSO.FileExists(sOutputFileName)) Then Set objfileOutput = objFSO.OpenTextFile(sOutputFileName, ForReading, False, TristateTrue) sOneRow = objfileOutput.ReadLine 'If user name in the file is different from parameter, we can't proceed. If ( sOneRow <> sGrantedUser ) Then WScript.StdOut.WriteLine("The Domain\User must be the same as " & sOneRow ) WScript.Quit End If Set objfileOutput = objFSO.OpenTextFile(sOutputFileName, ForAppending, True, TristateTrue) Else Set objfileOutput = objFSO.OpenTextFile(sOutputFileName, ForWriting, True, TristateTrue) 'The first line of Log file is the user who is going to be granted the permissions objfileOutput.WriteLine(sGrantedUser) End If End If
	
	If (err.number <> 0) Then WScript.StdOut.WriteLine("Failed to open Log file, error:" & err.Description) WScript.Quit End If End Function

Function AddAce(dacl, TrusteeName, gAccessMask, gAceType, gAceFlags, gFlags, gObjectType, gInheritedObjectType) Dim Ace1
	
	Set Ace1 = CreateObject("AccessControlEntry") Ace1.AccessMask = gAccessMask Ace1.AceType = gAceType Ace1.AceFlags = gAceFlags Ace1.Flags = gFlags Ace1.Trustee = TrusteeName 'Determine whether ObjectType has to be set If CStr(gObjectType) <> "0" Then Ace1.ObjectType = gObjectType End If

	'Determine whether InheritedObjectType has to be set. If CStr(gInheritedObjectType) <> "0" Then Ace1.InheritedObjectType = gInheritedObjectType End If dacl.AddAce Ace1

    Set Ace1 = Nothing End Function

Function DisplaySyntax WScript.StdOut.WriteLine("Syntax:") WScript.StdOut.WriteLine() WScript.StdOut.WriteLine("Grant Full mailbox access and SendAs permission to USER based on IMPORT_FILE:") WScript.StdOut.WriteLine("    CSCRIPT " & WScript.ScriptName & " -Add DOMAIN\USER IMPORT_FILE") WScript.StdOut.WriteLine("    NOTE: """ & OUTPUT_FILENAME & """ will be created for -Remove option ") WScript.StdOut.WriteLine() WScript.StdOut.WriteLine("Remove Full mailbox access and SendAs permission based on " & OUTPUT_FILENAME & ":") WScript.StdOut.WriteLine("    CSCRIPT """ & WScript.ScriptName & """ -Remove ") WScript.StdOut.WriteLine() WScript.StdOut.WriteLine("For all modes, errors are saved to " & ERROR_FILENAME )

	WScript.Quit End Function

Revisiones

Contraer esta tablaAmpliar esta tabla
VersiónFechaCambio
1.011-ene-2007Versión original
2.012-ene-2007Cambios editoriales
3.007-feb-2007Se rescribió el artículo completo
3.108-feb-2007Se actualizó la dirección URL del centro de descarga
3.208-feb-2007Cambios editoriales
4.009-feb-2007Se agregó nueva información sobre conflictos de salas de conferencias
4.112-feb-2007Se agregó Exchange 2003 Enterprise Edition a la sección "Se aplica a"
4.212-feb-2007Se corrigió un error tipográfico
4.312-feb-2007Se corrigió el número de paso en la nota
5.013-feb-2007Se agregó información de la máquina virtual a la sección "Cómo instalar la herramienta de Exchange"
6.015-feb-2007Se rescribió la sección "Los avisos aparecen después de lo esperado"
7.015-feb-2007Se agregó información de descarga para la máquina virtual del paquete Herramienta de actualizar calendario de Microsoft Exchange
8.016-feb-2007Se agregó información sobre las herramientas de administración del sistema de Exchange a la sección "Qué hacer antes de ejecutar la herramienta de Exchange"
8.119-feb-2007Se corrigió el nombre de archivo en la sección "Ejecutar Msextmzcfg.exe"
8.220-feb-2007Se agregó un espacio entre NombreUsuario y NombreArchivo en la sección correspondiente a la secuencia de comandos "Conceder permiso de buzón"
9.020-feb-2007Se rescribió el artículo
10.020-feb-2007Actualizaciones de metadatos internas
10.120-feb-2007Se corrigió un error tipográfico
10.220-feb-2007Se corrigió un error tipográfico
10.320-feb-2007Se corrigió un error tipográfico
10.421-feb-2007Se corrigió un error tipográfico
11.022-feb-2007Se agregó información sobre la versión 2 de la herramienta de Exchange
11.122-feb-2007Se corrigió un error tipográfico
11.223-feb-2007Se agregó una tabla para indicar las revisiones del artículo
12.026-feb-2007Se agregó información sobre el espacio del registro de eventos y sobre los mensajes de error y sus soluciones
13.027-feb-2007Se quitó la dirección URL de la información de descarga de la máquina virtual y se agregó una referencia cruzada a 933185
14.028-feb-2007En la sección "Problemas conocidos", se cambió el texto de la primera viñeta para incluir KB926666
15.027-feb-2007Se agregó información sobre la máquina virtual
16.028-feb-2007Se agregó información sobre la última revisión de la herramienta de actualizar datos de zona horaria de Microsoft Office Outlook (Tzmove.exe) a la sección "Para la reserva directa". Se agregó una referencia cruzada a 933146
16.128-feb-2007Se corrigieron las etiquetas de la tabla
17.001-mar-2007Se quitó la información de Exchange Server 5.5
18.005-mar-2007Se rescribió la tabla Revisiones
19.008-mar-2007Se agregó información sobre el mensaje de error "HRTestMailboxAccess"
19.113-mar-2007Se quitó el párrafo duplicado sobre el número de invitados en una petición de reunión
19.219-mar-2007Se actualizó la tabla Revisiones
19.321-mar-2007Se quitó la información de la máquina virtual de la sección "Acerca de la herramienta de Exchange"
19.403-abr-2007Se actualizó la sección Introducción

Propiedades

Id. de artículo: 930879 - Última revisión: lunes, 26 de noviembre de 2007 - Versión: 19.6
La información de este artículo se refiere a:
  • Microsoft Exchange Server 2007 Enterprise Edition
  • Microsoft Exchange Server 2007 Standard Edition
  • Microsoft Exchange Server 2003 Enterprise Edition
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange 2000 Enterprise Server
  • Microsoft Exchange 2000 Server Standard Edition
Palabras clave: 
kbhowto kbinfo kbexpertiseinter KB930879

Enviar comentarios

 

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