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

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 941018
简介
夏时制是一个系统,以便在以后的时间会发生日出和日落提前设置时钟。在晚上,其效果是更多的夏时制。许多国家/地区实行夏令时。这些国家的大多数都有自己的规则和管理法规的夏时制的开始和结束时。

夏令时 (DST) 的日期可能会更改年。Microsoft Outlook 用户必须更新他们的 Outlook 日历的 DST 规则更改每次。以前的 DST 规则和当前的 DST 规则之间的日期被称为本文中""DST 延长期。

本文介绍了可采取的 DST 延长期间发生的地址日历项目在 Outlook 中的操作。本文还介绍了更新的日历项目,根据新的 DST 规则存储在 Microsoft Exchange Server 中应采取的操作。本文中介绍的解决方案涉及到 Microsoft Exchange 日历更新工具 ("Exchange 工具")。

有关如何准备在 2007 年 (DST 2007 年) 夏时制的变化为所有受影响的 Microsoft 产品的详细信息,请访问下面的 Microsoft Web 站点: 在 2011 年,俄罗斯政府采纳一项法律,取消夏时制 (DST)。有关详细信息,请访问下面的 Microsoft 网站: 在俄语中的详细信息,请访问下面的 Microsoft Web 站点:
更多信息

有关 Exchange 工具

对于 Microsoft Windows 设置 DST 更新之后,在 DST 更改期间发生的所有旧的约会将错误地显示为发生一小时后。这是定期和单实例约会,则返回 true。以便他们能够正确显示在 Outlook 中,在 Microsoft Office Outlook Web Access 中,并基于协作数据对象 (CDO) 的应用程序中,您必须更新这些约会。

Outlook 提供了一个工具,它根据时区数据更新工具命名的 Microsoft Office Outlook ("Outlook 工具")。此工具使用户能够更新他们自己的日历。

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

Exchange 工具的简要介绍

Exchange 工具包含,两个独立的可执行文件。这些文件下表所述。
文件名称 说明
Msextmz.exe 此可执行文件在运行 Exchange Server 的服务器上的邮箱中提取时区信息。此可执行文件也会更新为指定的用户列表的邮箱日历。
Msextmzcfg.exe 此可执行文件会更新 Exchange Server 服务器中执行的大多数步骤所涉及的配置工具。

有关 Exchange 工具的新版本

根据客户反馈,Exchange 工具的新版本发布于 2007 年 8 月 13 日。这篇文章是指交换工具的新版本。如果您正在运行旧版本的 Exchange 工具,卸载它,然后再安装新版本。

Exchange 工具的新版本包括了以下改进:
  • 时区提取和日历更新进程 aresped 上 fourfold。
  • 配置工具的用户界面是 morestreamlined 和直观。
  • 更新会议室和 resourcemailboxes 的能力现在内置的配置工具。
  • Theconfiguration 工具现在内置更新用户邮箱的能力。
  • 故障排除文档将包括使用 theExchange 工具,并集成到配置工具。
  • 时区提取算法和错误 handlingcapabilities 进行了改进。
  • 日志记录过程是用户更加友好。

运行 Exchange 工具的风险

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

要降低这种风险,使用下列方法之一:
  • 该您的 updateclient 计算机和您更新邮箱日历时间,减少时间之间的时间间隔。
  • 如果组织中的计算机已更新长 timeago,使用高级的设置中的仅更新定期的会议设置。

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

要更新的邮箱选项

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

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

您必须进行额外的教育工作,以减少用户的困惑。
对所有受影响的用户和服务器中运行 Exchange 工具。 此选项为用户提供的简化的体验。 没有"风险的运行 Exchange 工具"一节中所述,与运行 Exchange 工具,相关的风险。
运行 Exchange 工具来更新定期约会。使用户可以通过使用 Outlook 工具更新他们自己的邮箱中的单实例约会。 单实例约会未得到正确更新的风险减少了。 运行 Outlook 工具的缺点被结合运行 Exchange 工具的缺点。
运行 Exchange 工具和 Outlook 工具都不。让用户检查他们的日历,并根据需要重新预订约会。 此选项可避免与运行 Exchange 工具相关联的风险。 除非所有用户重新都预订所有受影响的约会,则某些日历项目将 DST 延长期间一小时处于关闭状态。

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

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

如何安装 Exchange 工具

Exchange 日历更新工具是可供下载的自解压可执行文件 (Msextmz.exe) 形式。此工具是可以从 Microsoft 下载中心下载:

下载立即下载 Exchange 日历更新工具软件包。

创建虚拟机可帮助您安装并使用 Exchange 工具。虚拟机基于 Microsoft Windows Server 2003、 Outlook 2007 中、 Microsoft Office Excel 2007 中,和 Microsoft Office Word 2007。在这两个 Microsoft Virtual PC 2004 和 Microsoft Virtual Server 2005 R2 中,虚拟机工作正常。

Exchange 日历更新工具用于虚拟机的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
933185 虚拟机是用来帮助您部署 Exchange 组织中的夏令时 2007年日历更新
有关如何下载 Microsoft 支持文件的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591 如何从在线服务获得 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 更新。 有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
942763 2007 年 12 月为 Microsoft Windows 操作系统的累积时区更新

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

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

验证系统要求

您必须仅在满足以下条件,则为其计算机上运行 Exchange 工具:
  • 计算机有 Microsoft Office Outlook 2003年服务 Pack2 (SP2) 或安装 Microsoft Office Outlook 2007年。
  • 计算机有 Outlook 时区数据 Toolinstalled。
  • 在客户计算机上安装了 Microsoft.NET Framework 2.0 版。
不能在运行 Exchange Server 或 Exchange 系统管理工具的计算机上运行 Exchange 工具。如果您尝试在运行 Exchange Server 或 Exchange 系统管理工具的计算机上安装了 Exchange 工具时,您会收到以下错误消息:
不能使用 Microsoft Exchange 设置 Microsoft Exchange 日历更新工具。

验证权限和用户的其他要求

验证满足以下条件,则:
  • 管理信息存储更新每个 ExchangeServer 邮件数据库 (MDB) 上的权限。
  • 代理发送权限的所有邮箱 areupdated。
  • 完全邮箱访问权限的所有邮箱 areupdated。
  • 本地管理员权限授予 computerthat 正在运行 Exchange 工具。

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

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

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

在"参考"一节中提供的.vbs 脚本代码。下表说明了运行此脚本的两种模式。
模式 命令 说明
添加 CScript GrantMailboxPermission.vbs – 添加 域名 \ 用户名 文件名 此命令授予 域名 \ 用户名 在输入文件中列出的用户邮箱的用户完全邮箱访问和代理发送权限。

输入的文件必须是一个文本文件,包含用户邮箱的旧的域的名称。这些名称必须用回车 + 换行 (CRLF) 分隔。

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

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

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

如何使用 Exchange 工具

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

运行时区提取过程

若要更新邮箱日历,您必须确定时区的日历。时区提取过程会检查属性和邮箱日历来确定其时区的约会。若要运行时区提取过程,请按照下列步骤操作:
  1. 在欢迎页上,单击下一步

    注意欢迎页向您介绍配置工具 anddiscusses 运行该工具所需的权限。这篇文章的链接页上 alsoprovides。
  2. 指定的配置工具的设置。您分配的磁盘空间 tologging 至少 200 兆字节 (MB) 的 Werecommend。

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

    注意如果您已经执行时区提取时,您将可以通过单击跳过skipthis 步骤。

    注意显示状态栏,输出日志中,并实时显示的时间 zoneextraction 过程的链接。在时区提取过程程序之后, 单击下一步

    如果遇到错误,则显示 alink 与故障排除文档。
  4. 配置邮箱没有时区页上,然后单击下一步要扫描 calendaritems。

    注意如果该工具发现用户没有邮箱级别的 propertiesthat 表示他们所在的时区,该工具扫描实际会议和 appointmentsinside 这些日历来确定时区。您可以指定您希望配置工具来扫描到的增多的日历项目。Thelarger 号的指定,扫描将花费较长的项目。
  5. 解决未知的时区 displaynames页中,该工具将提示您要映射到已知的操作系统时区的时区的识别工具处。执行此操作后,单击下一步
  6. 如果配置工具发现了 multipletime 区域的用户,您需要手动指定用来更新用户的日历,一次性区域解决冲突。执行此操作后,单击下一步
  7. 保存邮箱 DNs 解析时区页中,谁还有没有时间 zoneinformation 或谁仍然有冲突区域信息的时间记录在任何其他用户单独的日志文件。单击下一步
时区提取过程现在已完成。用户和提取的时区的列表位于安装目录中的输出文件 (Output.txt)。

高级的设置

下表描述的前一过程的步骤 2 中,可以配置高级的设置。
设置功能方案注意事项适用性
更新仅定期会议此设置将更新受影响的只有定期会议受到 DST 更改。在 DST 延长期的单实例约会不会更新而不考虑是否应该对其进行更新。如果组织中的计算机都已更新前很长时间,则使用此设置。

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

当您执行此操作时,会创建在安装更新后的会议不会更新。这些会议是属于新的时区规则。
仅当客户端计算机的所有更新内少于 24 小时,和高渗透的更新时,此设置才有效。(有是高渗透的组织中已更新的计算机的百分比为高 90%范围内时。

此外,管理员可以指定一个更新日期。在对应于特定的更新,并且必须更新到特定时区的时间的时区中创建的会议。

会议室的言外之意是,仅更新工作室是在特定的时区中的会议。

用户邮箱的含意是如果没有指定SuppressExchange设置或SuppressAll设置,仅属于特定时区的用户邮箱进行更新。
此设置应用到所有邮箱,所有会议室,和所有用户日历。
SuppressExchangeMaxDepth这些设置将使受影响的用户的日历中的所有约会的 DST 更改进行更新,而不管用户是否这些日历项目的组织者。

如果用户的日历项目的组织者,是不会向拥有 Exchange 邮箱的与会者发送更新。更新被发送到没有 Exchange 邮箱的与会者。

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

如果组织拥有 Exchange Server 的日历系统,并且会议安排包括外部组织的与会者, SuppressExchange设置是优于SuppressAll设置。
发送会议更新,除了向非 Exchange 用户。因此,若要确保份相同的会议针对所有可能的与会者,必须更新在组织中的每个邮箱。

这种情况可能会大大增加邮箱具有要更新的数量。因此,处理时间可能会增加。

当大型的、 嵌套的通讯组列表在与会者列表时,是成本高昂的过程,以确定会议的与会者,并确定是否这些与会者拥有的 Exchange 邮箱。如果您指定此设置,并设置MaxDepth参数的较高值,可能会在域控制器上将放巨大负载。
此设置仅适用于用户邮箱。
SuppressAll此设置会导致在受到影响的用户的日历中的所有约会的 DST 更改进行更新,而不管用户是否这些日历项目的组织者。

如果用户的日历项目的组织者,是不会向与会者发送更新。
如果您不希望接收来自受影响 DST 延长期内的会议的筹备会议更新与会者,则使用此设置。发送会议更新。因此,若要确保份相同的会议针对所有可能的与会者,必须更新在组织中的每个邮箱。

这种情况可能会大大增加邮箱具有要更新的数量。因此,处理时间可能会增加。

没有 Exchange 邮箱的与会者不会收到更新。他们的约会可能不会更新,根据他们所运行的电子邮件系统和管理员执行的操作。
此设置仅适用于用户邮箱。

更新会议室和资源邮箱

您必须更新会议室和为了避免预订的资源邮箱。若要执行此操作,请按照下列步骤操作:
  1. 指定的资源和大会 RoomCalendars页上,键入,或粘贴您的组织的会议 roomsin 的别名的列表。单击解析,以验证别名,然后单击下一步
  2. 解决时区添加资源 andConference 房间日历的页面上,工具将提示您向 manuallyspecify 会议室时区会议室没有使用时区如果。执行此操作,然后单击下一步
  3. 提醒页将显示,以提醒您,toolis 准备更新日历。单击下一步
  4. 注意显示状态栏,到 areal 时显示的工具的输出以及输出日志的链接。单击下一步

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

更新用户邮箱的日历

若要执行此操作,请按照下列步骤操作:
  1. 更新用户 MailboxCalendars 的设置页上配置更新设置。

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

    单击下一步
  2. 提醒页将显示,以提醒您,toolis 准备更新日历。单击下一步
  3. 注意显示状态栏,到 areal 时显示的工具的输出以及输出日志的链接。后更新程序中,单击下一步

    如果遇到错误,alink 与故障排除文档显示在底部的 thispage。
  4. 单击完成

Exchange 工具日志文件和子目录

日志文件

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

    此文件包含所有用户邮箱 thatwere 提取以及其时区信息的列表。
  • TimeZoneExtraction.log

    该日志包含所有服务器的时间 zoneextraction 过程的组合的输出。
  • ResourceUpdate.log

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

    该日志包含所有服务器的 usermailbox 更新过程的组合的输出。
  • CalendarScan.log

    该日志包含所有服务器的 calendarscan 过程的组合的输出。
  • ConflictUsers.txt

    该日志包含了 conflictingtime 区域的用户的列表。例如,用户的邮箱属性表示为多个时区,theybelong。
  • NonExistent.txt

    此日志包含有没有时间 zoneinformation 的用户的列表。

子目录

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

    此更新 processfor 的工作子目录是会议室,为资源邮箱。该 directorycontains 以下文件:
    • Msextmz.log

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

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

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

    TheResource 子目录还包含以下子目录:
    • 日志文件

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

    没有用于处理时区提取每个 serveron 的一个子目录或执行日历更新。这些子目录中包含以下子目录:
    • CalendarScan

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

      这是个时区提取过程工作子目录。
    • 更新

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

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

在运行 Exchange 工具之后做什么

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

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

已知的问题

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

    如果您在 theExchange 服务器上安装 Exchange Server 更新,更新邮箱,定期在 Outlook Web Access 中的 arecreated 的会议之前不会更新 Exchange 工具。

    要解决此问题,请删除 Exchange Server 更新,运行 theExchange 工具,然后重新安装 Exchange Server Exchangeserver 上。
  • 必须重新启动 Exchange 2007 之后运行 Exchange 工具

    要正确显示日历项目,则必须重新开始交换服务运行 Outlook Web Access inExchange 2007 的 Exchange 工具之后。
  • 您不能安装 Exchange 工具

    未能成功安装 Exchange 工具 ifeither 的以下注册表项存在:
    • HKEY_CLASS_ROOT\Outlook.Application.9
    • HKEY_CLASS_ROOT\Outlook.Application.10
    在此方案中,您会收到下面的错误 messagewhen 您试图安装 Exchange 工具:
    无法与这个版本的 MicrosoftOutlook 设置 Exchange ServerCalendar 重定基址工具。
    若要变通解决此问题,请删除以下注册表项,安装了 Exchange 工具,然后还原 registrykeys。

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

    在用户列表模式和时区提取 mode,Msextmz.exe 可以处理服务器上的只有 65535 个邮箱。如果服务器上的有超过 65535 个邮箱,部分邮箱将不会被处理。
  • 不会更新公共文件夹日历

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

    如果您运行 Exchange 工具在邮箱上的 hasalready 已更新 Outlook 工具,或反之亦然,您遇到不 sideeffects。但是,如果运行 Exchange 工具,则不需要用户来运行 Outlook 工具分别。
  • 非会议提醒的显示时间晚于预期

    邮箱有关的非会议提醒更新根据 Exchange 如果 Outlook 已永远不会连接到 mailboxin 联机模式下,则不会更新工具。在这种情况下,提醒出现一个小时更高版本的 thanexpected。

    如果 Outlook 已经从未连接在联机模式下,您可以 mustadjust 日历约会的正确提醒,Outlook toolfinds。此外,提醒搜索文件夹不存在邮箱中。因此,该工具不会更新电子邮件、 联系人或其他提醒信息。

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

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

    如自解压缩的可执行文件 (Msextmz.msi 和 Msextmzcfg.msi),containedtwo.msi 软件包分发 Exchange 日历更新 Toolversion 1.0。您在安装 Exchange 工具的 2.0 版之前,必须先卸载 bothpackages。

    如果在安装 Exchange 工具的 2.0 版时,youstill 会遇到问题,请尝试重新安装然后卸载 1.0 版的 Exchange 工具。通过使用控制面板中的添加或删除程序功能使用的.msi 包,而不是 Dothis。然后,重新启动计算机,然后安装 Exchange 工具的 2.0 版。

    如果此过程处工作,直接从.msi 软件包解压二进制文件。
  • 运行的 Outlook 或 Exchange 更新工具时,约会将推后一小时对邮箱位于新西兰标准时间主时区

    发生这种情况在以下情况下 aretrue:
    • 您正在运行 Windows Vista 的计算机上运行 Outlook 或 Exchange 更新工具。
    • 正在更新邮箱的主时区是新西兰标准时间。
    要变通解决此问题,您必须运行 Outlook orExchange 更新工具对邮箱第二次或之后 1 月 1 日,2008年。

    由于 Windows Vista 处理时间 zoneinformation 以不同的方式比其他版本的 Windows,则出现此现象。如果您不运行 theOutlook 或 Exchange 更新工具再次或 2008 年 1 月 1 日之后第二个 DST 事件中的 allappointments 将熄灭一小时。第二个 DSTevent 包括从 2008 年 3 月 16 日至 2008 年 4 月 6 日的日期。

    如果确实要等到 1 月 2008 年 1 日更新约会的第二个 DSTevent 的 notwant,您可以运行 Outlook 或 Exchange 更新从一台计算机的工具,该 isrunning Windows XP 或 Windows Server 2003。
  • 以 MM/DD/YYYY 格式的日期更改为 M/DD/YYYY 格式

    在 Exchange 日历更新工具,可以为其设置自定义操作系统补丁程序的日期选项。当您执行此操作时,Exchange 日历更新工具无法正常工作。此问题是由于 MM/DD/YYYY 的日期格式更改为 M/DD/YYYY。

    此外,错误日志中记录一条错误消息类似于下面的错误消息:
    [2008 年 02 月 28 日上午 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"行包含的日期"28/2/08。"此日期应以 DD/MM/YYYY 格式。

    要变通解决此问题,请不要使用操作系统补丁程序的日期选项。
参考

"授予邮箱权限"脚本

Option Explicit' For FileSystemObjectConst ForReading = 1Const ForWriting = 2Const ForAppending = 8Const TristateTrue = -1Const TristateUseDefault = -2Const TristateFalse = 0'Permission Type: Allow or DenyConst ADS_ACETYPE_ACCESS_ALLOWED = &H0Const ADS_ACETYPE_ACCESS_DENIED = &H1Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6Const ADS_ACEFLAG_INHERIT_ACE = &H2Const ADS_ACEFLAG_NO_PROPAGATE_INHERIT_ACE = &H4Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8Const ADS_ACEFLAG_INHERITED_ACE = &H10Const ADS_ACEFLAG_VALID_INHERIT_FLAGS = &H1fConst ADS_ACEFLAG_SUCCESSFUL_ACCESS = &H40Const ADS_ACEFLAG_FAILED_ACCESS = &H80'Declare ADSI constantsConst ADS_SCOPE_SUBTREE = 2Const ADS_OPTION_SECURITY_MASK = 3Const ADS_OPTION_REFERRALS	= 1Const ADS_SECURITY_INFO_DACL = 4Const ADS_CHASE_REFERRALS_NEVER = &h00 Const ADS_CHASE_REFERRALS_SUBORDINATE = &h20 Const ADS_CHASE_REFERRALS_EXTERNAL = &h40'Microsoft Exchange ServerConst EX_MB_SEND_AS_ACCESSMASK  = &H00100Const EX_FULLMAILBOX_ACCESSMASK = 1Const EX_MB_SEND_AS_GUID = "{AB721A54-1E2F-11D0-9819-00AA0040529B}"'Application Parameter IndexConst ARG_INDEX_MODE = 0Const ARG_INDEX_USERNAME = 1Const ARG_INDEX_FILENAME = 2Const MIN_ARG = 1Const MODE_INVALID = -1 Const MODE_ADD = 0Const MODE_REMOVE = 1Const ADD = "-ADD"Const REMOVE = "-REMOVE"'Application Const StringConst EMPTYSTRING = ""Const ERROR_FILENAME = "GrantMailboxPermission.err"Const OUTPUT_FILENAME = "GrantMailboxPermission.log"Dim OUTPUT_DELIMITEROUTPUT_DELIMITER = vbTab'Logging fileDim objFSODim objfileErrorDim objfileOutputDim objfileImportDim objconnDim objCommandDim rootDSEDim sDomainContainerDim sUserLDAPPathDim objUserDim objSDNTsecurityDim objDACLNTDim objDACLEXDim objSDMailboxDim fFMADim fSendAsDim AccessTypeForFMADim AccessTypeForSendASDim fAddedFMADim fAddedSendAsDim fRemovedFMADim fRemovedSendAsDim sArraySplitDim sOneRowDim sGrantedUserDim dArgCountDim cScriptModeDim dArgExpectedDim fOneErrorOn Error Resume Next'Parameter VerificationdArgCount = Wscript.Arguments.CountIf (dArgCount < MIN_ARG) Then	DisplaySyntaxEnd IfcScriptMode = MODE_INVALIDSelect 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_INVALIDEnd SelectIf (cScriptMode = MODE_INVALID Or dArgCount <> dArgExpected) Then	DisplaySyntaxEnd IfIf (cScriptMode = MODE_ADD) Then	sGrantedUser = WScript.Arguments(ARG_INDEX_USERNAME)	If (IsValidUserName(sGrantedUser) = False) Then		DisplaySyntax	End IfEnd IfCreateImportExportFilesIf (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	LoopSet rootDSE = NothingSet objCommand = NothingSet objconn = NothingEnd IfIf (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	LoopEnd IfCloseImportexportFilesFunction IsValidUserName (sUserName)	Dim dPosition	dPosition = InStr(1, sUserName, "\")	If (dPosition = 0 ) Then		IsValidUserName = False		objfileError.WriteLine("Invalid User:" & sUserName)	Else		IsValidUserName = True	End IfEnd FunctionFunction 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 = NothingEnd FunctionFunction 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 = NothingEnd FunctionFunction 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 FunctionFunction 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 FunctionFunction 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 = NothingEnd FunctionFunction 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 = NothingEnd FunctionFunction 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 IfEnd FunctionFunction 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 = NothingEnd FunctionFunction 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

警告:本文已自动翻译

属性

文章 ID:941018 - 上次审阅时间:12/23/2014 00:57:00 - 修订版本: 2.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
反馈