如何通过使用 Exchange 日历更新工具来解决夏时制

文章翻译 文章翻译
文章编号: 941018 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

简介

夏时制是一种系统设置时钟向前以便就会在以后的小时发生日出和日落。其效果是更多的夏时制在晚上执行。许多国家/地区请遵守夏时制。其中的大部分国家/地区有自己的规则和管理法规要求的时间夏时制开始和结束。

夏令时 (DST) 的日期可能会更改从本年度截止到一年。Microsoft Outlook 用户不得不更新他们的 Outlook日历的 DST 规则更改每个时间。之间以前的日期DST 规则和当前的 DST 规则中提到为这篇文章"DST 延长的期。"

本文介绍的操作,您所允许的地址在 Outlook 中发生的日历项目期间的扩展DST 期。本文还介绍了所应采取的操作更新存储在 Microsoft Exchange Server 根据中的日历项目新的 DST 规则。本文介绍此解决方案包括Microsoft Exchange 日历更新工具 ("Exchange 工具")。

对于有关如何准备中的夏令时更改的详细信息2007 (DST 2007 年) 的所有受影响的 Microsoft 产品,请访问以下Microsoft Web 站点:
http://support.microsoft.com/gp/cp_dst
在 2011 年,俄罗斯政府采用以取消夏时制 (DST) 的法律。有关详细信息,请访问下面的 Microsoft 网站:
http://support.microsoft.com/gp/cp_dst#tab0
俄语的详细信息,请访问下面的 Microsoft 网站:
http://support.microsoft.com/gp/cp_dst/ru#tab0

更多信息

有关 Exchange 工具

您安装的 Microsoft Windows 中,所有旧的 DST 更新后DST 更改期间发生的约会将不正确显示为出现推迟一个小时。这适用于这两个反复出现和单个约会。您必须更新这些约会因此他们将会显示在 Outlook 中,在 Microsoft Office Outlook Web Access 中,正确而在应用程序中的根据协作数据对象(CDO)。

Outlook 提供了一个名为时区数据更新工具Microsoft Office Outlook ("Outlook 工具") 的工具。此工具使用户若要更新他们自己的日历。

有关时区数据更新的详细信息工具,请单击下面的文章编号,以查看 Microsoft 中的文章知识文库:
931667如何解决在 2007 年的夏令时更改为 Microsoft Office Outlook 使用时区数据更新工具
Exchange 日历更新工具 ("交换工具") 可帮助您避免管理员在部署中面临的困难广泛的所有用户以及以确保每个用户在运行 Outlook 工具Outlook 工具正确。

简要介绍的 Exchange 工具

Exchange 工具包含,两个单独的可执行文件。这些文件下表所述。
收起该表格展开该表格
文件名称说明
Msextmz.exe 此可执行文件中提取的时区从邮箱运行 Exchange Server 的服务器上的信息。这可执行文件也会更新一组指定的邮箱日历用户。
Msextmzcfg.exe 此可执行文件配置工具来执行很多涉及的步骤正在更新 Exchange Server 服务器。

有关 Exchange 工具的新版本

根据客户反馈,Exchange 工具的新版本的在 2007 年 8 月 13 日发布。本文引用的新版本Exchange 工具。如果您运行的较旧版本的 Exchange 工具,卸载它,然后再安装新版本。

新版本的Exchange 工具包括以下改进:
  • 时区提取和日历更新进程fourfold 加快。
  • 配置工具的用户界面时,更多简化而直观。
  • 更新会议室和资源的能力邮箱现在内置的配置工具。
  • 更新用户邮箱的能力现在内置配置工具。
  • 故障排除文档现在附带Exchange 工具,而且它已集成到配置工具中。
  • 时区提取算法和错误处理功能也得到了改进。
  • 日志记录过程是对用户更加友好。

运行 Exchange 工具的风险

当您运行 Exchange 工具时,是一种风险,不能正确更新单个约会。例如,操作系统后创建用户时的单实例约会更新可能不正确地更新。

若要减少这种风险,请使用之一以下方法:
  • 减少您更新的时间之间的时间间隔客户端计算机和您更新邮箱日历的时间。
  • 如果组织中的计算机已更新了很长时间以前,使用 仅更新定期会议 在中设置高级的设置.

    通常情况下,不创建人单实例约会提前多个月。因此,如果 DST更新已安装多个月前,大部分的单实例会议该分为 DST 延长期将已通过使用 new 创建过渡的 DST 规则。这些会议没有进行更新。
  • 如果您知道确切的日期的所有客户端计算机已更新,使用 操作系统补丁程序日期 在中设置高级的设置.如果指定一个日期,则单实例通过交换不更新该日期后创建的约会此工具。
注意 如果在客户端上运行 Outlook 工具或 Exchange 工具Windows Vista 中,并且您运行的计算机对邮箱运行该工具其中,家里的时区是新西兰标准时间,您必须运行该工具早于 2008 年 1 月 1 日的第二次。有关详细信息,请参见"已知问题"一节。

若要更新邮箱选项

下表列出了可用于更新的五个选项若要使用 DST 2007 时区规则的用户邮箱。
收起该表格展开该表格
选项专业人员缺点
分发给每个用户,Outlook 工具,然后再指示若要更新他们自己的邮箱的用户。 此选项可避免风险的是与运行 Exchange 工具相关联。 很难保证正确而及时的所有用户将都运行 Outlook 工具方式。

未安装 Outlook 的用户将无法运行Outlook 工具。

您必须进行一些教育工作减少用户疑问。
对所有受影响的用户和服务器运行 Exchange 工具。 此选项为用户提供了简化的体验。 没有与作为运行 Exchange 工具中,相关的风险"风险的运行 Exchange 工具"一节所述。
运行 Exchange 工具来更新唯一的定期约会。允许用户通过使用更新他们自己的邮箱中的单实例约会Outlook 工具。 还有更小的风险的单个约会不正确的更新。 运行 Outlook 工具的缺点是加上正在运行 Exchange 工具的缺点。
运行 Exchange 工具既 Outlook 工具。询问用户若要检查他们的日历并根据需要 re-book 约会。 这选项可以避免与运行 Exchange 工具相关联的风险。 所有用户都 re-book 所有受影响的约会,除非某些日历项目将推后一个小时关闭 DST 延长期间。

您必须进行额外的教育工作,以减少用户的困惑。
分发给每个用户,Outlook 工具,然后再指示若要更新他们自己的邮箱的用户。然后,使用的时区提取模式若要确定用户是否正在运行 Outlook 工具 Exchange 工具。

如果用户未运行 Outlook 工具,管理员可以运行 Exchange 工具。
此选项不会降低用户的风险运行该工具中及时地,而且它避免了相关联的风险与运行 Exchange 工具。 这不是一个选项,如果用户运行 Microsoft Office Outlook 2007年。

如何安装了 Exchange 工具

是否可以下载与 Exchange 日历更新工具自解压可执行文件 (Msextmz.exe) 的窗体。该工具是可用从 Microsoft 下载中心下载:

收起这个图片展开这个图片
下载
下载Exchange 日历更新工具程序包现在。

创建虚拟机,以帮助您安装和使用 Exchange 工具。虚拟机基于 MicrosoftWindows Server 2003、 Outlook 2007、 Microsoft Office Excel 2007 中,和 MicrosoftOffice Word 2007。在这两种 Microsoft Virtual PC 2004 工作的虚拟机和在 Microsoft Virtual Server 2005 R2。

有关详细信息关于虚拟机以执行 Exchange 日历更新工具,单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
933185虚拟机,可帮助您部署 Exchange 组织中的夏令时 2007年日历更新
有关如何下载 Microsoft 支持详细信息文件,单击下面的文章编号,以查看 Microsoft 中的文章知识文库:
119591 如何从联机服务获得 Microsoft 支持文件
Microsoft 扫描此文件中的病毒。Microsoft 使用大多数当前日期上可用的病毒检测软件的文件已过帐。该文件存储在安全性得到增强的服务器,以防止任何未经授权的更改的文件。

通过 Exchange 工具支持的语言

Exchange 工具是仅适用于英语。该工具将运行仅在英语 (美国) 的计算机。

与 Exchange 工具兼容的版本的 Exchange Server

Exchange 工具可以更新以下版本中的邮箱Exchange Server:
  • Microsoft Exchange Server 2007年企业版
  • Microsoft Exchange Server 2007年标准版
  • Microsoft Exchange Server 2003年企业版
  • Microsoft Exchange Server 2003年标准版
  • Microsoft Exchange 2000 服务器企业版
  • Microsoft Exchange 2000 Server 标准版

Exchange 工具支持的操作系统

Exchange 工具将在下面的 32 位版本上运行操作系统:
  • Microsoft Windows Server 2003
  • Microsoft XP Windows
  • Windows Vista

要在运行 Exchange 工具之前执行的操作

安装更新

在运行 Exchange 工具之前,请确保该客户端和服务器计算机被正确更新。若要执行此操作,请上安装 Windows DST 更新客户端和服务器上。 有关详细信息信息,请单击下面的文章编号,以查看在文章微软知识文库:
9427632007 年 12 月的累积时区更新 (对于 Microsoft Windows 操作系统

如果您正在运行 Microsoft Exchange Server2003 Service Pack 2 (SP2) 安装一个或两个的下列更新为适用于您的组织:
  • 更新 911829
  • 更新 924334
有关这些更新的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
911829当您试图执行任何编辑任务,或必须单击以启用 Outlook Web Access 中的撰写图文框时,您会收到一条错误消息
924334 撰写邮件窗体后停止响应 Exchange Server 2003年中安装 Internet Explorer 7.0 和 Outlook Web Access 客户端上的 S/MIME 控件
如果用户正在耶路撒冷中, 欧巴西、 或 E.南美所在的时区,请阅读本指南中的下面的 Microsoft 知识库文章:

943390 重新设定基某些 Outlook 日历项目被址不正确使用 Outlook 时区数据更新工具调整某些时区的夏时制更改时

验证系统要求

您必须为其只能在一台计算机上运行 Exchange 工具在满足以下条件:
  • 计算机有 Microsoft Office Outlook 2003年服务包2 (SP2) 或安装了 Microsoft Office Outlook 2007年。
  • 计算机有 Outlook 时区数据工具安装。
  • Microsoft。NET Framework 2.0 版安装上客户端计算机。
您无法在运行的计算机上运行 Exchange 工具Exchange Server 或 Exchange 系统管理工具。如果您尝试安装Exchange 工具正在运行 Exchange Server 或 Exchange 的计算机上系统管理工具,您会收到以下错误消息:
不能随安装 Microsoft Exchange 日历更新工具Microsoft Exchange。

验证权限和其他用户需求

验证满足以下条件为真:
  • 管理上每个 Exchange 信息存储权限更新服务器邮件数据库 (MDB)。
  • 对所有邮箱的代理发送权限是更新。
  • 对所有邮箱的完全邮箱访问权限就是更新。
  • 本地管理员权限的计算机上正在运行 Exchange 工具。

有关"授予邮箱权限"脚本

您可以使用示例 GrantMailboxPermission.vbs 脚本授予域用户邮箱的完全访问权限,并对所有的代理发送权限邮箱。

可以仅通过 Exchange Server 运行此脚本正在运行 Exchange 2000 服务器或 Exchange 的计算机上的管理员Server 2003。不能运行 Exchange 的计算机上运行此脚本Server 2007。但是,您可以使用 Exchange 管理外壳程序授予所需的权限。

中提供了为.vbs 脚本代码"参考"部分。下表描述中的这两种模式脚本运行。
收起该表格展开该表格
模式命令说明
添加 CScript GrantMailboxPermission.vbs –add 域名 \ 用户名 File_Name 此命令授予 域名 \ 用户名 用户邮箱的完全访问权限和输入中列出的用户邮箱的代理发送权限文件。

输入的文件必须是包含文本文件的旧式系统域的用户邮箱的名称。这些名称必须用回车符分隔返回 + 行送纸 (CRLF)。

该脚本会生成GrantMailboxPermission.log 文件。此文件是一条记录的邮箱,已处理。日志文件的第一行是 域名 \ 用户名 授予权限的用户访问权限。不要删除此文件。在删除模式下使用此文件。

如果显式"拒绝"访问权限分配给用户,该脚本该信息记录在文件中,被命名为"GrantMailboxPermission.err"。"脚本不会授予或更改权限。

如果用户属于已分配的安全组的"拒绝"访问权限,该脚本将授予完全邮箱访问和代理发送权限。但是,用户将不能若要登录到邮箱。将记录所有错误GrantMailboxPermission.err 文件。
删除 CScript GrantMailboxPermission.vbs –remove该命令将删除完全邮箱访问和代理发送在 GrantMailboxPermission.log 中列出的邮箱的权限从文件 域名 \ 用户名 用户。" 域名 \ 用户名 在中指定用户GrantMailboxPermission.log 文件。
备注
  • 当您正在运行的计算机上运行此脚本Exchange Server,该脚本时返回句点 (.) 字符脚本已成功处理用户。该脚本返回一个感叹号脚本无法成功处理用户时,字符 (!)。
  • 不能是一种时区提取模式下输出文件用作此脚本的输入文件。这为创建输入的文件编写脚本,再粘贴到该时区提取模式下输出文件的内容记事本,将内容另存为一个新文档,然后使用作为新文档输入的文件。

如何使用 Exchange 工具

要使用 Exchange 工具,请启动 Exchange 日历更新配置工具 (Msextmzcfg.exe)。此程序将帮助您完成整个更新日历的过程。

运行时区提取进程

若要更新邮箱的日历,您必须确定的时区在日历中。时区提取过程会检查属性和邮箱日历,以确定其时区的约会。若要运行次区域抽取进程,请执行以下步骤:
  1. 在欢迎页上,单击 下一步.

    注意 欢迎使用页介绍如何使用配置工具和讨论运行该工具所需的权限。该页还提供指向该文章的链接。
  2. 指定的配置工具的设置。我们建议您分配的磁盘空间至少 200 兆字节 (MB)日志记录。

    如果您想要更改默认设置,单击高级的设置.有关高级详细信息设置,请参阅此过程后面的表。
  3. 选择本地的 Active Directory 中的 Exchange 服务器要更新目录服务林。然后,单击下一步 若要启动时区提取过程。

    注意 如果您已经执行了时区提取,则可以跳过通过单击此步骤 跳过.

    请注意,状态栏中,指向的链接的输出日志,以及实时显示时区显示抽取进程。抽取进程后所在的时区完成,请单击 下一步.

    如果遇到错误,显示的故障排除文档链接。
  4. 配置 没有时间的邮箱区域 页,然后单击 下一步 要扫描的日历项。

    注意 如果该工具发现用户没有邮箱级别的属性指示其所在的时区,该工具扫描实际会议和约会内部的那些日历确定时区。您可以指定数量要扫描的配置工具的日历项。"较大数目的项的指定,扫描将花费的时间越长。
  5. 在中 解决未知的时区显示名称 页上,该工具会提示您可以将映射该工具不会影响的时区不能识别为已知的操作系统时区。执行此操作后,单击下一步
  6. 如果该配置工具发现有多个用户时间区域,会提示您手动解决该冲突,通过指定一个用来更新用户的日历时区。执行此操作后,单击下一步.
  7. 在中 具有未解析的时间保存邮箱 DNs区域 页,任何剩余的用户,它仍有任何时区中记录的信息或人员仍有冲突的时区信息单独的日志文件。单击 下一步.
时区提取过程现已完成。列表用户和提取的时区的位于在输出文件 (Output.txt)安装目录。

高级的设置

下表描述了高级设置的您可以配置在前一过程的步骤 2 中。
收起该表格展开该表格
设置功能方案注意事项适用性
更新仅定期会议这设置更新只有定期会议受 DST 更改。在 DST 延长期的单实例约会不是不管它们的更新是否更新。如果计算机中组织已更新很久,请使用此设置。

通常情况下,人们不会创建单个约会许多几个月提前。因此,如果未安装多个月 DST 更新之前,大部分分为 DST 延长的单实例会议通过使用新的 DST 转换规则,将已创建期间。这些会议没有进行更新。
如果用户创建了单实例会议提前多个月,该会议不会更新如果此设置为指定。此设置适用于所有邮箱,为所有会议文件室,并为所有用户日历。
操作系统修补程序安装日期此设置将指定的单实例约会创建或更新之后您指定的日期不是更新。如果您知道所有客户端计算机是何时的确切日期更新,请使用此设置。

当您这样做,那些会议创建安装更新后不会更新。这些会议范围在新的时区规则。
此设置是时才有效客户端计算机已更新所有少于 24 小时内,并没有此更新的高渗透。(没有高渗透时所占百分比组织中已更新的计算机处于高90%范围。)

此外,管理员可以指定只有一个更新日期。与对应的时区中创建的会议特定更新,并给特定设置的区域必须更新的时间。

会议室的含意是,仅更新会议文件室是在特定的时区。

用户的含义邮箱是,如果 SuppressExchange 设置或 SuppressAll 未指定设置,只有用户邮箱的属于特定区域进行更新的时间。
此设置适用于所有邮箱,所有的会议室,以及所有用户日历。
SuppressExchangeMaxDepth这些设置会导致中的所有约会受影响的用户的日历更新而不考虑 DST 更改用户是否这些日历项目的组织者。

如果用户管理器中的日历项目,不会将更新发送给与会者谁拥有 Exchange 邮箱。更新被发送到不具有 Exchange 的与会者邮箱。

" MaxDepth 设置指定的级别执行以确定哪些与会者的通讯组列表扩展具有 Exchange 邮箱和哪个与会者不这样做。
如果,使用此设置您不希望 Exchange 用户能够接收来自组织者的会议更新受 DST 延长期的会议。

" SuppressExchange 设置是优于 SuppressAll 如果该组织有非 Exchange,设置服务器的日历系统,如果将会议安排包括与会者的将外部组织。
发送会议更新,除为非 Exchange 用户。因此,为了确保的份相同的会议更新的所有可能的与会者,必须在组织中的每个邮箱进行更新。

这种情况可能会显著增加的数量必须进行更新的邮箱。因此,处理时间可能会增加。

嵌套的通讯组列表时大,位于该与会者列表中,它是成本高昂的过程,可以确定与会者的会议,并确定这些与会者是否拥有 Exchange 邮箱。如果指定此设置和设置为较高的值 MaxDepth 参数,巨大负载可能对域控制器。
此设置仅适用于用户邮箱。
SuppressAll此设置可以使所有用户的日历中的约会,受 DST 更改为无论用户是那些日历的组织者更新项。

如果用户的日历项目的组织者,有更新不发送给与会者。
使用此设置,如果您不希望与会者接收来自对受影响的会议组织者的会议更新DST 延长的期。发送会议更新。因此,若要使确实同一个会议的副本进行更新的所有可能的与会者,组织中的每个邮箱必须进行更新。

这种情况可能会显著增加必须进行更新的邮箱数。因此,处理时间可能会增加。

不这样做的与会者具有 Exchange 邮箱执行的操作不会收到更新。可能不是自己的约会更新,具体情况取决于它们正在运行的电子邮件系统,具体取决于其管理员采取的措施。
此设置仅适用于对用户邮箱。

更新会议室和资源邮箱

您必须更新会议室和避免资源邮箱预定时间冲突。为此,请按照下列步骤:
  1. 在上 指定资源和会议室日历 页中,键入或粘贴的会议室的别名列表在您的组织。单击 解决 若要验证别名,然后单击 下一步.
  2. 在上 为资源解析时区和会议房间日历 页上,该工具会提示您手动如果没有提供的会议室,指定为一间会议室的时区有一个时区。执行此操作,然后再单击 下一步.
  3. 提醒页显示提醒您的工具将要更新日历。单击 下一步.
  4. 请注意,状态栏中,链接到输出日志,并显示实时显示工具的输出。单击下一步.

    如果遇到错误,链接到故障排除文档将显示在此页的底部。

更新用户邮箱的日历

为此,请按照下列步骤:
  1. 在上 更新用户邮箱设置日历 页面上,为更新配置设置。

    如果您还没有指定 SuppressExchangeSuppressAll 高级设置,选择的时区受 DST。否则,请选择所有时区。

    单击下一步.
  2. 提醒页显示提醒您的工具将要更新日历。单击 下一步.
  3. 请注意,状态栏中,链接到输出日志,并显示实时显示工具的输出。在更新后完成,请单击 下一步.

    如果遇到错误,故障排除文档的链接显示在此底部页。
  4. 单击 完成.

Exchange 工具日志文件和子目录

日志文件

Exchange 工具可创建下列日志文件中的安装目录:
  • Output.txt

    此文件包含的所有用户的邮箱列表,已提取连同其时区信息。
  • TimeZoneExtraction.log

    此日志包含时区的组合的输出对所有服务器的抽取进程。
  • ResourceUpdate.log

    此日志中包含的更新过程的输出会议室和为资源邮箱。
  • UserUpdate.log

    此日志中包含用户组合的的输出对所有服务器的邮箱更新过程。
  • CalendarScan.log

    此日志包含日历的组合的输出扫描的所有服务器的过程。
  • ConflictUsers.txt

    此日志将包含具有冲突的用户的列表时区。例如,用户的邮箱属性表明它们属于多个时区。
  • NonExistent.txt

    此日志将包含不有任何时区的用户列表信息。

子目录

Exchange 工具可创建以下子目录中的安装目录:
  • 资源

    这是为更新过程的工作子目录对于会议室和资源邮箱。此目录包含以下文件:
    • Msextmz.log

      这是用于 Exchange 工具的输出文件更新过程。
    • Errors.txt

      此文件包含邮箱的列表。
    • Processed.txt

      此文件包含的邮箱的列表已成功更新。
    注意 所有工作子目录中都包含这些文件。

    "资源子目录还包含下面的子目录:
    • 日志文件

      该子目录包含更新日志中的每个邮箱已成功更新的。每个更新日志应包含的列表已更新的会议。
  • 服务器名

    没有为每个服务器的一个子目录其上执行时区提取进程或日历更新。这些子目录中包含以下子目录:
    • CalendarScan

      这是日历扫描工作子目录过程。
    • 提取

      这是时区工作子目录抽取进程。
    • 更新

      这是用户邮箱的工作子目录更新过程。它包含以下子目录:
      • 日志文件

        该子目录包含更新日志中的每个邮箱已成功更新的。每个更新日志应包含的列表已更新的会议。

在运行 Exchange 工具后要执行操作

在完成对所有 Exchange 运行 Exchange 工具后在您的环境中的服务器应用合适的 Exchange Server DST 更新。下面的列表按 Exchange Server 版本和服务包级别。为您的版本 Exchange Server 中的安装更新顺序。

Exchange Server 2007
940006 累积更新 4 的 Exchange Server 2007年的说明
累积更新 4 Exchange Server 2007 年包括以下的 DST 修补程序:
  • 937656 新西兰 2007年中的夏令时 (DST) 开始后遇到了针对 Exchange 2007 的 Outlook Web Access 中的问题
  • 932561 到另一个 Exchange 组织中发送,通过使用 Exchange 2007 的约会可能不正确一小时如果一个组织处于西部澳大利亚所在的时区
Exchange Server 2003 SP2
926666 在 Exchange 2003 Service Pack 2 的 2007年夏令时更改的更新
931915 在 2007 年在纽芬兰夏令时更改的为 Exchange Server 2003 Service Pack 2 的更新
929895 当组织之一位于西部澳大利亚时区中的一小时之间不同的 Exchange Server 组织发送的约会可能会不正确
937653 新西兰更改为夏时制期间,在 2007 年后遇到 Exchange Server 2003年中的一个或多个问题
Exchange Server 2003 SP1
940123 您遇到的问题后夏令时 (DST) 的 Exchange 2003 中 Service Pack 1 在 2007 年开始在新西兰

已知的问题

  • 在 Outlook Web Access 中创建的定期会议不会通过 Exchange 工具更新

    如果您在安装 Exchange Server 更新Exchange 服务器之前更新邮箱,定期的会议在 Outlook Web Access 中创建由 Exchange 工具不会对其进行更新。

    若要解决此问题,请删除 Exchange Server 更新程序,运行交换工具,并在交换重新安装 Exchange Server 更新服务器。
  • 在运行 Exchange 工具后必须重新启动 Exchange 2007

    要正确显示日历项目,您必须重新启动Exchange 服务为 Outlook Web Access 中运行 Exchange 工具之后Exchange 2007。
  • 您不能安装 Exchange 工具

    如果未成功安装 Exchange 工具存在以下注册表项之一:
    • HKEY_CLASS_ROOT\Outlook.Application.9
    • HKEY_CLASS_ROOT\Outlook.Application.10
    在此方案中,您会收到以下错误消息当您尝试安装了 Exchange 工具:
    Exchange Server不能与此版本的 Microsoft 安装日历 Rebasing 工具Outlook。
    若要解决此问题,请删除这些注册表项,安装了 Exchange 工具,然后再将还原注册表键。

    重要 此节、 方法或任务包含告诉您如何操作的步骤来修改注册表。然而,可能发生严重的问题,如果您修改注册表不正确。因此,请确保您按照这些步骤仔细。为增加保护,请对其进行修改之前备份注册表。然后,您可以在出现问题时还原注册表。有关详细信息有关如何备份和还原注册表,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    322756 如何备份和还原在 Windows 注册表
  • 可以处理每个服务器的邮箱数限制

    在用户列表模式和时区提取模式下,Msextmz.exe 可以处理仅包含 65535 邮箱服务器上。如果服务器具有不处理超过 65535 邮箱,一些邮箱。
  • 公共文件夹日历不会更新

    Exchange 工具不会更新公用文件夹日历。有关如何更新公共文件夹日历信息,请参阅有关 Outlook 工具的文档。
  • 您可以在同一环境中运行 Outlook 工具和 Exchange 工具

    如果您有一个邮箱上运行 Exchange 工具已更新由 Outlook 工具 (或者相反),您遇到任何边长效果。但是,如果您运行 Exchange 工具,则无需用户单独运行 Outlook 工具。
  • 非会议提醒的显示时间晚于预期

    对于由更新的邮箱的非会议提醒如果 Outlook 已永远不会连接到邮箱,则不会更新 Exchange 工具在联机模式下。在此情况下,提醒的显示时间一小时晚于预期。

    如果 Outlook 已经永远不会连接在联机模式下,您必须调整日历约会的不正确提醒的 Outlook 工具查找。此外,该邮箱中不存在提醒搜索文件夹。因此,该工具不会更新电子邮件项目、 联系人或其他提醒。

    例如,该工具不会更新上的电子邮件项目的提醒若要在将来的一次后续操作。该工具还不会更新已提醒的任务项目上的提醒。
  • 您会收到一条错误消息:"无法安装,因为检测到以前版本的 Microsoft Exchange 日历更新工具。请卸载它们,然后再次运行此安装程序"

    如果您以前安装了 Exchange 日历更新工具版本 1.0,则在安装 Exchange 之前必须卸载此版本日历更新工具版本 2.0。

    Exchange 日历更新工具1.0 版是一个自解压可执行文件,其中包含作为分发两个.msi 软件包 (Msextmz.msi 和 Msextmzcfg.msi)。您必须卸载这两软件包在安装 2.0 版的 Exchange 工具之前。

    如果您当您安装 2.0 版的 Exchange 工具,仍然遇到问题请尝试重新安装,然后卸载 1.0 版的 Exchange 工具。执行操作这通过使用.msi 软件包,而不是通过使用 添加或删除程序 控制面板中的新功能。然后,重新启动计算机,并然后安装 2.0 版的 Exchange 工具。

    如果此过程不会不起作用,直接从.msi 程序包中提取的二进制文件。
  • 在运行 Outlook 或 Exchange 更新工具时,约会是关闭一小时对其中家里的时区是新西兰标准时间的邮箱

    这种现象发生在下列情况时true:
    • 在上运行的 Outlook 或 Exchange 更新工具在运行 Windows Vista 的计算机。
    • 正在邮箱的家庭所在的时区更新是新西兰标准时间。
    若要变通解决此问题,您必须运行 Outlook 或针对第二个时间早于 1 月的邮箱的 Exchange 更新工具1,2008年。

    出现此现象的原因 Windows Vista 处理时区不同于其他版本的 Windows 的信息执行操作。如果您不运行Outlook 或 Exchange 更新工具早再次于 2008 年 1 月 1 日,所有第二个 DST 事件中的约会将关闭一小时。第二个 DST事件包括从 2008 年 3 月 16 日至 2008 年 4 月 6 日的日期。

    如果不这样做想等到 2008 年 1 月 1 日更新中第二个 DST 的约会事件,您可以在从计算机中运行 Outlook 或 Exchange 更新工具在运行 Windows XP 或 Windows Server 2003。
  • MM/DD/YYYY 格式的日期更改为 M/DD/YYYY 格式

    您设置 操作系统补丁程序日期 在 Exchange 中的选项日历更新工具。当您执行此操作,请将 Exchange 日历更新工具无法正常工作。出现此问题是因为 MM/DD/YYYY 的日期格式更改为 M/DD/YYYY。

    此外,类似的错误消息在错误日志中会记录以下错误消息:
    [2008-28-02 7: 10: 21上午] [776]: wmain: 未能读取配置-错误 0x80070057。
    由于不正确的选项设置下一节的示例邮箱中的出现此问题。服务器.ini 文件。
    ServerDN = /O=OrgName/OU=AdminGroup/cn=Configuration/cn=Servers/cn=ServerName 
    LogDirectory = C:\Program Files\MSExTmz\ServerName\Update\LogFiles\ 
    ErrorFile = C:\Program Files\MSExTmz\ServerName\Update\errors.ServerName.txt 
    ProcessedFile = C:\Program Files\MSExTmz\ServerName\Update\processed.ServerName.txt 
    LogFile = C:\Program Files\MSExTmz\ServerName\Update\msextmz.ServerName.log 
    SystemPatchDate = 2/28/2008  
    DebugFile = C:\Program Files\MSExTmz\debug\ServerName.debug.bin 
    PerMailboxTimeLimit = 15 
    PostMailboxDelay = 0 
    RebaseOptions = 171 
    InputFile = C:\Program Files\MSExTmz\ServerName\Update\Mailboxes.ServerName.txt 
    
    请注意"SystemPatchDate"行包含日期"2/28/08。"此日期应以 DD/MM/YYYY 格式。

    要解决此问题,请不要使用 操作系统修补程序日期 选项。

参考

"授予邮箱权限"脚本

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 Server
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 Verification
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

		    ' Verify Full Mailbox Access and Send As permissions.
		    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 Send As or Full Mailbox Access permissions do not exist, add these permissions.
		    If ( (AccessTypeForFMA = ADS_ACETYPE_ACCESS_DENIED) Or (AccessTypeForSendAs = ADS_ACETYPE_ACCESS_DENIED_OBJECT) ) Then
			    'If Deny access is already granted, do not add permissions for 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 Full Mailbox Access permissions.
				    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 Send As permissions.
				    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
	'Retrieve the granted user from the first line of the 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)

		'The first column is the LDAP path.
		sUserLDAPPath = sArraySplit(0)
		'The second column is Full Mailbox Access permissions.
		fAddedFMA = sArraySplit(1)
		'The third column is Send As permissions.
		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 the output file name as the 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
		'Determine whether the output file already exists.
		If (objFSO.FileExists(sOutputFileName)) Then
			Set objfileOutput = objFSO.OpenTextFile(sOutputFileName, ForReading, False, TristateTrue)
			sOneRow = objfileOutput.ReadLine
			'If the user name in the file differs from the parameter, the process cannot continue.
			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 the log file is the user who is 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

属性

文章编号: 941018 - 最后修改: 2011年10月19日 - 修订: 1.0
这篇文章中的信息适用于:
  • 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 标准版
关键字:?
kbhowto kbinfo kbmt KB941018 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 941018
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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