/ 中存储网

告诉你如何使用 ILM 2007 和 FIM 2010 置备 Exchange

2014-08-28 23:40:53 来源:中存储网

管理员经常使用 Identity Lifecycle Manager 2007 (ILM 2007) 在企业 Active Directory (AD) 和 Exchange 平台上置备用户、联系人和邮箱。利用 ILM 2007 和 Forefront Identity Manager 2010 (FIM 2010) 等身份管理工具,可以消除在 AD 和 Exchange 中创建帐户和邮箱时涉及的容易出错的手动任务。

ILM 2007 和 FIM 2010 不仅可以自动置备帐户和邮箱,还可以合并业务逻辑。这样可以执行一些功能,例如根据用户的业务小组或物理位置在特定服务器上创建邮箱;基于用户的角色设置初始邮箱大小和限制;以及在可用空间最大的邮件存储中置备新的用户邮箱。FIM 2010 提供了更复杂的业务逻辑,这种逻辑包含审批工作流和高级功能(如无代码置备)。

Exchange 环境中最常见的 ILM 2007 实现是同步位于两个不同 AD 林中的全局地址列表 (GAL);置备和取消置备用户的邮箱;以及在将邮件迁移到新 Exchange 版本时同步两个企业 Exchange 环境中的目录。

置备方案中 ILM 2007 和 FIM 2010 的实现可能会因网络基础结构、安全策略和 Exchange 配置的不同而异。本文概述了使用这两种产品在 Exchange 环境中进行置备的过程,还深入剖析了使用 Exchange 2003、2007 和 2010 简化置备过程的主要功能。

结构概述

ILM 2007 和 FIM 2010 可以在 Exchange 2003、2007 和 2010 中创建启用邮件的对象。但是请注意,并非 Exchange 的每个版本都支持 ILM 的所有发行版。下表显示了版本支持明细:

(您可以在 Exchange 服务器可支持性矩阵中找到大量兼容性信息。)

若要启用 Exchange 置备,必须设置用于创建启用邮件的对象的置备过程,还必须配置与 Active Directory 和 Exchange 交互的 Active Directory Management Agent (ADMA) 以便置备启用邮件的对象。

置备过程概述

Exchange 2003

对于 Exchange 2003,ILM 2007 和 FIM 2010 使用 Exchange 的收件人更新服务 (RUS) 完成置备过程。在导出过程中,ADMA 连接到可用或首选域控制器,然后将启用邮件的对象(由置备配置确定)直接添加到目录。

RUS 监视对目录中启用邮件的对象的更改,并完成 ILM 2007 和 FIM 2010 创建的每个启用邮件的对象的置备过程。Exchange 将每个对象写入目录,这些对象都带有创建对象所需的最小属性集。RUS 将 Exchange 策略应用到这些对象并添加其余必需的属性,使这些对象能够支持完整的 Exchange 功能集。

置备 Exchange 2003 时,ILM 2007 和 FIM 2010 不需要直接连接到 Exchange 服务器,只需要连接到 Active Directory 域控制器 (ADDC) 即可。(请参见图 1。)

图 1 Exchange 2003 置备

Exchange 2007

对于 Exchange 2007,ILM 2007 Feature Pack 1 (ILM 2007 FP1) 和 FIM 2010 使用 Update-Recipient Windows PowerShell cmdlet(Exchange 2007 管理工具的一部分)完成置备过程。在导出过程中,ADMA 连接到可用或首选域控制器,然后将启用邮件的对象(由置备配置确定)添加到目录。

将启用邮件的对象置备到目录后,ILM 2007 和 FIM 2010 将在 ILM/FIM 服务器上调用 Update-Recipient cmdlet。

图 2 Exchange 2007 置备

Exchange 2007 置备(请参见图 2)需要 ILM 2007 FP1 或更高版本或者 FIM 2010。此外,安装必须满足以下要求:

ILM 2007/FIM 2010 同步服务帐户必须是域帐户。 ILM 2007 FP1 管理代理 (MA) 的服务帐户必须是 Exchange 收件人管理员组的成员。 ILM 2007/FIM 2010 同步服务器必须已经加入域。不过,不必加入将执行 Exchange 置备的域。 Windows PowerShell 1.0 必须已安装在 ILM/FIM 服务器上。 Exchange 管理工具必须已安装在 ILM/FIM 服务器上。

Exchange 2010

对于 Exchange 2010,ILM 2007 Feature Pack 1 Service Pack 1 和 FIM 2010 使用 Update-Recipient cmdlet 完成置备过程。但是与 Exchange 2007 的置备过程不同的是,在此过程中,cmdlet 使用 Windows PowerShell 2.0 和远程执行直接在 Exchange 服务器上运行。(请参见图 3。)

图 3 Exchange 2010 置备

Exchange 2010 置备需要 ILM 2007 FP1 SP1 或更高版本或者 FIM 2010。此外,安装必须满足以下要求:

ILM 2007/FIM 2010 同步服务帐户必须是域帐户。 ILM 2007 FP1 MA 的服务帐户必须是 Exchange 收件人管理员组的成员。 ILM 2007/FIM 2010 同步服务器必须已经加入域。不过,不必加入将执行 Exchange 置备的域。 Windows PowerShell 2.0 必须已安装在 ILM/FIM 服务器上,并且必须已安装在 Exchange 2010 客户端访问服务器 (CAS) 上且已针对远程访问进行配置。

置备

若要启用 Exchange 置备,必须使用脚本置备或无代码置备来配置用于创建启用邮件的对象的过程。下表显示了置备 FIM 2010 以及各种版本的 ILM 支持的类型:

使用 ExchangeUtils 进行脚本置备

ExchangeUtils 类提供了一组实用工具方法,可用来在连接器空间中创建新的邮件对象。若要设置所需的邮箱,用户对象中至少需要具有以下属性:

DN – DN(可分辨名称)属性是字符串表示,用于唯一标识 AD 服务器中的对象。 mailNickname – 此属性是一个别名,Exchange 用来标识启用邮件的对象。 homeMDB – homeMDB 属性指定收件人的邮箱存储的 URL。

下面是 Visual Basic .NET 和 Visual C# .NET 中用到的属性的示例:

Visual Basic .NET:

复制代码

Public Sub Provision(ByVal mventry As MVEntry) _
    Implements IMVSynchronization.Provision

    Dim adMA As ConnectedMA
    Dim csentry As CSEntry
    Dim nickName, mailboxMDB As String
    Dim dn as ReferenceValue

    try
        adMA = mventry.ConnectedMAs("Fabrikam AD MA")

        nickName   = mventry("mailNickname").Value
        mailboxMDB = mventry("homeMDB").Value

        ' Construct the distinguished name
        dn = adMA.EscapeDNComponent("CN=" + mventry("cn").Value).Concat("ou=mailboxes,dc=fabrikam,dc=com")

        If 0 = adMA.Connectors.Count then
            csentry = ExchangeUtils.CreateMailbox(adMA, dn, nickName, mailboxMDB)
        End If

        ' Handle any exceptions
        Catch ex As Exception
            '...
    End Try
End Sub

Visual C# .NET:

复制代码

void IMVSynchronization.Provision (MVEntry mventry)
{
    ConnectedMA adMA;
    CSEntry csentry;
    String nickName, mailboxMDB;
    ReferenceValue dn;

    try
    {
        adMA = mventry.ConnectedMAs["Fabrikam AD MA"];

        nickName   = mventry["mailNickname"].Value;
        mailboxMDB = mventry["homeMDB"].Value;

        // Construct the distinguished name
        dn = adMA.EscapeDNComponent("CN=" + mventry["cn"].Value).Concat("ou=mailboxes,dc=fabrikam,dc=com");

        if(0 == adMA.Connectors.Count)
        {
            csentry = ExchangeUtils.CreateMailbox(adMA, dn, nickName, mailboxMDB);
        }
    }

    // Handle any exceptions
    catch(Exception ex)
    {
        //...
    }
}

(您可以在此处找到有关 ExchangeUtils 类的详细信息。有关使用 ExchangeUtils 的示例,请转到此处。

Exchange 2007 的脚本置备要求与 Exchange 2003 相同。Exchange 2003 启用邮件的对象的现有脚本置备无需针对 Exchange 2007 置备过程进行更改即可工作。但是,对于 Exchange 2010,您将需要为 msExchHomeServerName 属性添加属性流,我们将在本文有关 Exchange 2010 和 msExchHomeServerName 的部分介绍此属性。

自定义脚本置备

虽然 ExchangeUtils 提供了一个简单方法来创建启用邮件的对象,但您可能需要更好地控制置备过程。所有 ExchangeUtils 方法都返回 CSEntry 对象,利用该对象可以设置对象的附加属性。建议您允许 ExchangeUtils 创建启用邮件的对象并使用返回的 CSEntry 对象指定附加属性。

若要创建启用邮箱的用户(该用户具有默认密码并且可以登录),需要使用 ExchangeUtils 生成邮箱,然后使用返回的 CSEntry 对象添加 unicodepwd 和 userAccountControl 属性,如以下针对 Visual Basic .NET 和 Visual C# .NET 的示例所示:

Visual Basic .NET:

复制代码

Public Sub Provision(ByVal mventry As MVEntry) _
    Implements IMVSynchronization.Provision

    Dim adMA As ConnectedMA
    Dim csentry As CSEntry
    Dim nickName, mailboxMDB As String
    Dim dn as ReferenceValue

    try
        adMA = mventry.ConnectedMAs("Fabrikam AD MA")

        nickName   = mventry("mailNickname").Value
        mailboxMDB = mventry("homeMDB").Value

        ' Construct the distinguished name
        dn = adMA.EscapeDNComponent("CN=" + mventry("cn").Value).Concat("ou=mailboxes,dc=fabrikam,dc=com")

        If 0 = adMA.Connectors.Count then
            csentry = ExchangeUtils.CreateMailbox(adMA, dn, nickName, mailboxMDB)
            csentry("unicodepwd").Values.Add("p@ssword1")
            csentry("userAccountControl").IntegerValue = 512
        End If

        ' Handle any exceptions
        Catch ex As Exception
            '...
    End Try
End Sub

Visual C# .NET:

复制代码

void IMVSynchronization.Provision (MVEntry mventry)
{
    ConnectedMA adMA;
    CSEntry csentry;
    String nickName, mailboxMDB;
    ReferenceValue dn;

    try
    {
        adMA = mventry.ConnectedMAs["Fabrikam AD MA"];

        nickName   = mventry["mailNickname"].Value;
        mailboxMDB = mventry["homeMDB"].Value;

        // Construct the distinguished name
        dn = adMA.EscapeDNComponent("CN=" + mventry["cn"].Value).Concat("ou=mailboxes,dc=fabrikam,dc=com");

        if(0 == adMA.Connectors.Count)
        {
            csentry = ExchangeUtils.CreateMailbox(adMA, dn, nickName, mailboxMDB);
            csentry["unicodepwd"].Values.Add("p@ssword1");
            csentry["userAccountControl"].IntegerValue = 512;
        }
    }

    // Handle any exceptions
    catch(Exception ex)
    {
        //...
    }
}

无代码置备

如果您使用的是 FIM 2010,则可以选择使用无代码置备,该方法允许您在置备某个对象的过程中指定添加到该对象的属性,而无需编写 VB 或 C# 代码。若要创建邮箱,至少需要使用以下初始属性流配置同步规则:

DN – DN(可分辨名称)属性是字符串表示,用于唯一标识 AD 服务器中的对象。 mailNickname – 此属性是一个别名,Exchange 用来标识启用邮件的对象。 homeMDB – HomeMDB 属性指定收件人的邮箱存储的 URL。

若要创建启用邮箱的用户(该用户具有默认密码并且可以登录),还需要提供 unicodepwd 和 userAccountControl 的初始属性流,如图 4 所示。

图 4 出站属性流配置

Exchange 2010 和 msExchHomeServerName

置备 Exchange 2010 时,创建启用邮件的用户对象需要附加属性(即 msExchHomeServerName),必须在置备代码中提供该属性。Exchange 使用此属性来确定将启用邮件的对象的邮件传送到何处。

若要在使用 ExchangeUtils 的置备或您自己开发的置备中提供 msExchHomeServerName,需要添加以下示例中以粗体显示的代码行:

Visual Basic .NET:

复制代码

Public Sub Provision(ByVal mventry As MVEntry) _
    Implements IMVSynchronization.Provision

    Dim adMA As ConnectedMA
    Dim csentry As CSEntry
    Dim nickName, mailboxMDB As String
    Dim dn as ReferenceValue

    try
        adMA = mventry.ConnectedMAs("Fabrikam AD MA")

        nickName   = mventry("mailNickname").Value
        mailboxMDB = mventry("homeMDB").Value

        ' Construct the distinguished name
        dn = adMA.EscapeDNComponent("CN=" + mventry("cn").Value).Concat("ou=mailboxes,dc=fabrikam,dc=com")

        If 0 = adMA.Connectors.Count then
            csentry = ExchangeUtils.CreateMailbox(adMA, dn, nickName, mailboxMDB)

	' Add msExchHomeServerName
csentry("msExchHomeServerName").Value = "<value of msExchHomeServerName>"
        End If

        ' Handle any exceptions
        Catch ex As Exception
            '...
    End Try
End Sub

Visual C# .NET:

复制代码

void IMVSynchronization.Provision (MVEntry mventry)
{
    ConnectedMA adMA;
    CSEntry csentry;
    String nickName, mailboxMDB;
    ReferenceValue dn;

    try
    {
        adMA = mventry.ConnectedMAs["Fabrikam AD MA"];

        nickName   = mventry["mailNickname"].Value;
        mailboxMDB = mventry["homeMDB"].Value;

        // Construct the distinguished name
        dn = adMA.EscapeDNComponent("CN=" + mventry["cn"].Value).Concat("ou=mailboxes,dc=fabrikam,dc=com");

        if(0 == adMA.Connectors.Count)
        {
            csentry = ExchangeUtils.CreateMailbox(adMA, dn, nickName, mailboxMDB);

// Add msExchHomeServerName
csentry["msExchHomeServerName"].Value = "<value of msExchHomeServerName>";

        }
    }

    // Handle any exceptions
    catch(Exception ex)
    {
        //...
    }
}

若要在同步规则中提供 msExchHomeServerName,请添加图 5 中显示的初始属性流。

图 5 出站初始属性流配置

管理代理配置

若要正确置备启用邮件的对象,Active Directory 管理代理必须与 AD 和 Exchange 交互。这要求您配置 Exchange 置备选项(选择“配置扩展”,然后在“创建管理代理”对话框的右侧窗格中进行配置,如图 6 所示)。

图 6:配置规则扩展

您还必须确保从“管理代理设计器”窗格中选择“选择属性”,然后在对话框的右侧窗格中选取所需的属性。有关选取哪些属性的指导,我们提供了一个图表,其中显示各种对象类型的属性。

从 Exchange 2003 升级到 2007:ILM 2007 FP1

ILM 2007 FP1 增加了用于置备 Exchange 2007 启用邮件的对象的功能。如图 7 所示,可以通过从“创建管理代理”对话框的左侧窗格中选择“配置扩展”,然后在右侧窗格中标记相应的复选框来启用 Exchange 2007 GAL 管理代理的置备。

图 7 创建自定义管理代理

这将导致在导出时,ILM 2007 FP1 会在本地调用 Update-Recipient cmdlet,从而完成置备过程。不必执行其他配置操作。

从 Exchange 2003 升级到 2007:ILM 2007 FP1 SP1/FIM 2010

除了可以置备 Exchange 2007 启用邮件的对象外,使用 ILM 2007 FP1 SP1 和 FIM 2010 还可以显式指定要执行置备的 Exchange 2007 服务器。“创建管理代理”对话框的“配置扩展”窗格中包含一个下拉菜单,可供选择 Exchange 版本。

如果选择 Exchange 2007,则会显示一个文本框,您可在其中输入 Exchange 2007 服务器的名称(请参见图 8)。例如,对于使用防火墙并需要更好地控制网络流量的用户,可以使用此附加配置。保留服务器名称为空将导致 cmdlet 查找 Exchange 服务器。请注意,如果 cmdlet 无法联系您指定的服务器,将失败并返回错误。

图 8 使用“配置扩展”中的下拉列表选择 Exchange 版本

从 Exchange 2003 或 2007 升级到 2010

如上文所述,使用 ILM 2007 FP1 SP1 和 FIM 2010 可以置备 Exchange 2010 启用邮件的对象。由于该过程通过 Windows PowerShell 使用远程执行(如前面讨论的“置备过程概述”的 Exchange 2010 子部分中所述),因此您必须提供服务器名称。如图 9 所示,单击“创建管理代理”对话框左侧的“配置扩展”后,可以从右侧窗格的下拉菜单中选择要置备的 Exchange 版本。

选择 Exchange 2010,然后在出现的文本框(请参见图 9)中输入 Exchange 2010 远程 PowerShell (RPS) 服务器的 URI。请注意,不能将此字段留空。此值的格式应为 http://<cas server>/powershell

图 9 从 Exchange 2003/2007 升级到 2010

Exchange 2007 以及将 ILM 2007 FP1 升级到 SP1

升级到 ILM 2007 FP1 SP1 后,ILM 2007 FP1 部署中的现有管理代理将保持完全正常运行,而无需执行附加配置或额外步骤。如果需要,可以在“配置扩展”中指定服务器名称,控制 Update-Recipient cmdlet 将联系的 Exchange 服务器,但这不是必要的。

导出过程

正确配置 ILM 2007 和 FIM 2010 的 Exchange 置备后,ILM 2007 和 FIM 2010 将在导出过程中连接到 Active Directory 和 Exchange,然后创建启用邮件的对象。对于每个版本的 Exchange,此过程都有所不同。

Exchange 2003

对于 Exchange 2003,ILM 2007 和 FIM 2010 使用 Exchange 2003 的 RUS 功能来完成置备过程。在导出过程中,ADMA 连接到可用域控制器,然后将启用邮件的对象(由置备配置确定)添加到目录。

如前所述,RUS 监视对目录中启用邮件的对象的更改,并完成由 ILM 2007 和 FIM 2010 创建的每个对象的置备过程。再次重申,Exchange 将每个对象写入目录,这些对象都带有创建对象所需的最小属性集。因此,RUS 将 Exchange 策略应用到这些对象并添加其余必需的属性,使这些对象能够支持完整的 Exchange 功能集。

最后,与前面一样,置备 Exchange 2003、ILM 2007 和 FIM 2010 时,只需要连接到 ADDC;不需要直接连接到 Exchange 服务器。

Exchange 2007

此处的信息实际上与“置备过程概述”下的“Exchange 2007”子部分中介绍的信息相同,但为了方便起见,我们在这里重复一下。对于 Exchange 2007,ILM 2007 FP1 和 FIM 2010 使用 Update-Recipient cmdlet 完成置备过程。在导出过程中,ADMA 连接到可用或首选域控制器,然后将启用邮件的对象(由置备配置确定)添加到目录。

将启用邮件的对象置备到目录后,ILM 2007 和 FIM 2010 将使用以下命令行在 ILM/FIM 服务器上调用 Update-Recipient PowerShell cmdlet:

复制代码

Update-Recipient -Identity "<ExportedDN>"-Credential <PSCredential> -DomainController <Fqdn>

其中,尖括号中的占位符将按照以下列表所示进行替换:

ExportedDN–This is the Distinguished Name of the recently exported object. PSCredential–This is replaced with a PowerShell Credential object constructed using the domain, username and password configured for the ADMA. Fqdn–The actual value for this parameter is the fully qualified domain name of the domain controller to which the recently exported object was written.

此外,ILM 2007 FP1 SP1 和 FIM 2010 支持 Update-Recipient 的 Server 参数。如果已使用 Server 值配置 MA,ILM 2007 FP1 SP1 和 FIM 2010 将使用以下命令行在 ILM/FIM 服务器上调用 Update-Recipient cmdlet:

复制代码

Update-Recipient -Identity "<ExportedDN >" -Credential <PSCredential> -
DomainController <Fqdn> -Server <ServerIdParameter>

其中,尖括号中的占位符将按照上述列表所示进行替换,但增加了以下内容:

ServerIdParameter–The name of the server entered in the Management Agent configuration dialog is put in place of this parameter.

Any errors that occur when initializing or running the PowerShell cmdlet will set the result of the run profile and will be noted in the Application Event Log. For details on specific errors, see the 故障排除section further on in this article.

You can find complete details on theUpdate-Recipient cmdlet for Exchange 2007 in the Microsoft TechNet Exchange Server TechCenter.

Exchange 2010

如“置备过程概述”的“Exchange 2010”子部分中所述,对于 Exchange 2010,ILM 2007 FP1 SP1 和 FIM 2010 使用 Update-Recipient cmdlet 完成置备过程。但是与 Exchange 2007 的置备过程不同的是,在此过程中,cmdlet 使用 Windows PowerShell 2.0 和远程执行直接在 Exchange 服务器上运行。

将启用邮件的对象置备到目录后,ILM 2007 FP1 SP1 和 FIM 2010 将使用以下命令行(该命令行中的替代内容与前面讨论的尖括号中的项的替代内容相同)在 Exchange 2010 服务器上远程调用 Update-Recipient cmdlet:

          Update-Recipient -Identity "<ExportedDN>" -DomainController <Fqdn> 

打开到 Exchange 服务器的远程连接时,将使用在 ADMA 中配置的凭据,因此这些凭据在命令行上并不是必需的。

Any errors that occur when initializing or running the cmdlet will set the result of the run profile and will be put into the Application Event Log. For details on specific errors, see the故障排除section that follows this one.

You can find complete details on theUpdate-Recipient cmdlet for Exchange 2010  in the Microsoft TechNet Exchange Server TechCenter.

故障排除

Any errors that occur when initializing or running the PowerShell cmdlet will set the result of the run profile and will be noted in the application event log. In this section we cover the most frequent errors that occur during export.

常见错误

在本故障排除示例和后面的其他故障排除示例中,斜体文本显示事件日志在导出过程中记录的部分错误消息。错误消息后面的罗马字体(非斜体)文本给出了可能原因。

消息:

复制代码

Event Type: Error 
Event Source: MIIServer
Event Category: Server
Event ID: 6801
.
.
.
Description: The extensible extension returned an unsupported error in MIIS. The stack trace is: Microsoft.MetadirectoryServices.ExtensionException: ExternalEmailAddress is mandatory on MailUser.The mail contact and mail user must have a valid external e-mail address. at Exch2007Extension.Exch2007ExtensionClass.AfterExportEntryToCd....

原因:

这是在导出过程中报告的最常见错误。Update-Recipient cmdlet 尝试使用指定的 DN 为对象启用邮件功能。Cmdlet 通过检查启用邮件的对象的各种属性来处理这些对象。最后一步,它将尝试将对象转换为 MailUser。缺少邮件属性或邮件属性无效的用户对象通常将返回此错误,因为 Update-Recipient 无法将该对象转换为启用邮箱的用户。如果 MA 和 Update-Recipient 与不同的域控制器通信,则也可能出现此错误。

以下问题之一都很可能是导致此错误的原因:

您导出的 homeMDB 值可能缺失或无效。请确保要导出的对象的 homeMDB 值存在并指向有效的邮箱数据库。 如果在使用 Exchange 2010 时看到此错误但 homeMDB 是正确的,则 msExchHomeServerName 可能缺失或无效。请确保要导出的对象的 msExchHomeServerName 值存在并指示有效的 Exchange 服务器。 如果未在 ILM/FIM 服务器上安装 Exchange 2007 管理工具 SP2 或更高版本,则可能会针对 Exchange 2007 显示此消息。有关详细信息,请参见知识库文章 963679。 如果未在 ILM/FIM 服务器上安装 Exchange 2007 管理工具 Rollup 4 或更高版本,则也可能会针对 Exchange 2007 显示此错误。有关详细信息,请参见知识库文章 949858。

Exchange 2007 和 ILM 2007 FP1 错误

消息:

复制代码

Event Type: Error
Event Source: MIIServer
Event Category: Server
Event ID: 6801
.
.
.
Description: The extensible extension returned an unsupported error. The stack trace is: 
Microsoft.MetadirectoryServices.ExtensionException:  System.IO.FileNotFoundException: Could not load file or assembly 'System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified....

原因:

这表明 ILM 2007 FP1 服务器上未安装 Exchange 2007 管理工具。ILM 2007 FP1 尝试加载 Update-Recipient cmdlet,但 PowerShell 未找到该 cmdlet。

Exchange 2007、FIM 2010 和 ILM 2007 FP1 SP1 错误

消息:

复制代码

Event Type: Error
Event Source: MIIServer
Event Category: Server
Event ID: 6801
.
.
.
Description: The extensible extension returned an unsupported error. The stack trace is: Microsoft.MetadirectoryServices.ExtensionException: Windows PowerShell snap-in Microsoft.Exchange.Management.PowerShell.Admin is not installed on the machine....

原因:

如果未在 ILM 2007 FP1 SP1 服务器上安装 Exchange 2007 管理工具,则会出现此消息。ILM 2007 FP1 SP1 尝试加载 Update-Recipient cmdlet,但 PowerShell 未找到该 cmdlet。Microsoft 对加载处理稍微进行了更改,因此对于相同的情形,ILM 2007 FP1 SP1 和 FIM 2010 返回的错误与 ILM 2007 返回的错误略有不同。

Exchange 2010

消息:

复制代码

Event Type: Error
Event Source: MIIServer
Event Category: Server
Event ID: 6801
.
.
.
Description: The extensible extension returned an unsupported error. The stack trace is:Microsoft.MetadirectoryServices.ExtensionException: Could not load type 'System.Management.Automation.Runspaces.WSManConnectionInfo' from assembly 'System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=....

原因:

如果 ILM 2007 FP1 SP1 服务器上未安装 Windows PowerShell 2.0,您将收到与此类似的消息。ILM 2007 FP1 SP1 尝试远程加载和执行 Update-Recipient cmdlet,但 ILM 2007 FP1 SP1 无法打开支持远程执行的 PowerShell 会话。

消息:

复制代码

Event Type: Error 
Event Source: MIIServer 
Event Category: Server 
Event ID: 6801 
Description: The extensible extension returned an unsupported error. The stack trace is:Microsoft.MetadirectoryServices.ExtensionException:Microsoft.MetadirectoryServices.ExtensionException: Invalid URI: The format of the URI could not be determined....
   at Exch2010Extension.Exch2010ExtensionClass.BeginExportToCd(String connectTo, String domain, String server, String user, String password)

原因:

在 ILM 2007 FP1 SP1 的“配置扩展”对话框中输入的 CAS 服务器值的格式不正确。正确格式为 http://<cas server>/powershell

消息:

复制代码

Event Category: Server 
Event ID: 6801 
Description: The extensible extension returned an unsupported error. The stack trace is:Microsoft.MetadirectoryServices.ExtensionException:Microsoft.MetadirectoryServices.ExtensionException: Connecting to remote server failed with the following error message : WinRM cannot process the request. The following error occured while using Kerberos authentication: The network path was not found.

原因:

指定的用户名或密码无效。 使用了 Kerberos 但未指定身份验证方法或用户名。 Kerberos 接受域用户名但不接受本地用户名,而您提供的是本地用户名。 远程计算机名称和端口的服务主体名称不存在。 客户端和远程计算机位于不同的域中,并且这两个域之间不存在信任。

检查完刚提到的问题后,请尝试以下操作:

检查事件查看器中的与身份验证相关的事件 更改身份验证方法,并将目标计算机添加到 WinRM TrustedHosts 配置设置或者使用 HTTPS 传输

请注意,TrustedHosts 列表中的计算机可能未进行身份验证。有关 WinRM 配置的更多帮助,请运行命令:winrm help config。有关详细信息,请参见 about_Remote_Troubleshooting 帮助主题。

如果您在 ILM 2007 FP1 SP1 的“配置扩展”对话框中输入的 CAS 服务器值不正确,或者尚未为远程 PowerShell 执行配置 CAS 服务器,则将看到此错误。ILM 2007 FP1 SP1 尝试远程加载和执行 Update-Recipient cmdlet,但 ILM 2007 FP1 SP1 无法连接到 CAS 服务器上的远程 PowerShell 会话。

注意事项

ILM 2007 和 FIM 2010

Exchange 置备是 ILM 2007 和 FIM 2010 以及 ADMA 的一项主要功能。只需最少的配置,您便可以将启用邮件的对象轻松置备到 Exchange 2003、2007 和 2010。需要注意的是,如果 ILM 或 FIM 服务器与 Exchange 之间存在防火墙,则可能需要执行附加配置,而这些配置可能不为您的部署所接受。

例如,Exchange 服务器与 ILM 之间的防火墙实现在 Exchange 资源林实现中尤为常见。此设置要求用户登录到帐户林,且 Exchange 服务器必须在资源林(不同的 AD 林)中承载。

在此方案中,通常在帐户林中实现 ILM 服务器。因此,除了置备 AD 用户帐户所要求的操作外,在 Exchange 中置备启用邮件或启用邮箱的对象还要求您打开防火墙端口。

通信协议和端口

ILM 要求下表中显示的端口将帐户置备到 AD,但它需要附加端口以便在 AD/Exchange 2007 环境中置备启用邮件或启用邮箱的用户对象。

Exchange 2007

如本文前面所述,ILM 2007 FP1 利用 Update-Recipient PowerShell cmdlet 完成置备过程。该 cmdlet 在 ILM 服务器上执行,用于对 Exchange 2007 中的帐户启用邮件或邮箱功能。除了要求连接到 AD 域控制器之外,该 cmdlet 还要求连接到全局编录 (GC) 和 Exchange RUS 服务器。此方案更为复杂,这是因为 Update-Recipient 在由 ILM 2007 FP1 使用时具备 RUS 选择算法,该算法最终可以选择环境中的任何 RUS 服务器。这要求为所有 Exchange RUS 服务器打开多个 RUS 端口。(请参见图 10。)

图 10 带有防火墙的 Exchange 2007 置备

下表显示在 Exchange 2007 环境中置备启用邮件或启用邮箱的帐户时需要在防火墙上打开的端口。

对于带有 DNS 的 DC/GC:

对于 RUS(邮箱服务器):

Exchange 2010

如本文前面所述,ILM 2007 FP1 利用 Update-Recipient PowerShell cmdlet 完成置备过程。该 cmdlet 在 ILM 上执行,用于对 Exchange 2010 中的帐户启用邮件或邮箱功能。在此版本的 Exchange 中,所有 cmdlet 都使用 PowerShell 的远程执行功能来远程执行。这意味着,此方案所需的端口将根据 PowerShell 的远程执行要求进行限制,如图 11 所示。

图 11 带有防火墙的 Exchange 2010 置备

下面各表显示在 Exchange 2010 环境中置备启用邮件或邮箱的帐户时必须打开的防火墙端口。

对于带有 DNS 的 DC/GC:

对于 CAS(邮箱服务器):

自定义 PowerShell 脚本

稍后我们将探讨 PowerShell 脚本,该脚本在指定域中查找当前未启用邮箱的用户帐户,然后对这些用户帐户启用邮箱。该脚本需要在 AD 域控制器上运行,您可以使用任务计划程序设置脚本将运行的时间。正如您在图 12 中看到的,ILM 2007 FP1 仍可以将用户帐户置备到 AD 域控制器,而且它利用 PowerShell 脚本对用户帐户启用邮件功能。

图 12 Exchange 2007/2010 置备手动脚本

请注意,虽然您可以使用此脚本为 ILM 置备的用户启用邮箱,但该脚本仅适用于不含 homeMDB 或 mailNickname 属性的对象。

复制代码

$domain = "LDAP://" + "DC=Fabrikam,DC=Com"

# Open a connection object to AD
$root = New-Object System.DirectoryServices.DirectoryEntry($domain)

# Create a query object 
$query = new-Object System.DirectoryServices.DirectorySearcher($root) 

# Construct a filter string to retrive all objects which are not mailenabled or mailbox-#enabled
$filter = "(&(objectClass=user)(!(legacyExchangeDN=*)))"

# Define filter in the query object
$query.filter = $filter
	
#Retrive objects which met the filter property
$objects = $query.findAll()


foreach($usr in $objects)
{     	
	$properties = $usr.Properties 
	$DN = $properties.distinguishedname[0]
	$dbLoc = "FabrikamFirst Storage groupMailbox Database"
	Enable-Mailbox -identity $DN -database $dbLoc

	#more informaton on Enable-mailbox here at 
	#http://technet.microsoft.com/enus/library/aa998251(EXCHG.80).aspx
		
}

若要在不使用 homeMDB 值或 mailNickname 的情况下创建用户,您可以

使用脚本置备:使用管理代理 Connectors 属性的 StartNewConnector() 方法对象而不是使用 ExchangeUtils.CreateMailbox()。 使用无代码置备:不在同步规则中包含初始属性流。

或者,要完成置备过程,您可以对 Exchange 组织中的部分或所有对象实施电子邮件地址策略。以下简短脚本将对组织中的所有对象实施所有电子邮件地址策略:

复制代码

Get- EmailAddressPolicy | Update-EmailAddressPolicy

遗憾的是,这是一项成本很高的更新,而且可能需要数分钟时间,具体取决于环境的复杂程度。您可以改为使用此脚本(将 AddressPolicy01 替换为特定电子邮件地址策略的标识)对组织中的所有对象实施特定电子邮件地址策略:

复制代码

Update-EmailAddressPolicy -Identity AddressPolicy01

如果您要置备通讯组,则需要附加脚本来更新组织中的通讯簿。以下脚本将更新组织中的所有通讯簿:

复制代码

Get- AddressList | Update-AddressList
Get- GlobalAddressList  | Update-GlobalAddressList

但是,这也是一项成本很高的更新,而且也可能需要数分钟时间,具体取决于环境的复杂程度。作为替代方法,您可以使用:

复制代码

Update-AddressList -Identity "All ContactsAddressList01"
Update-GlobalAddressList -Identity "My Global Address List"

此脚本将仅更新组织中的特定通讯簿。若要使用该脚本,请将 All ContactsAddressList01 替换为要更新的通讯簿的标识,并将 My Global Address List 替换为要更新的全局通讯簿的标识。

利用 Exchange 2003 服务器

建议使用 ILM 2007 或 FIM 2010 与 Exchange PowerShell 来启用 Exchange 置备,但组织的安全要求可能不允许通过防火墙进行所需的通信。这种情况下,您可以使用 Exchange 2003 服务器完成 Exchange 置备。

对于 Exchange 2007 部署,您可以同时运行 Exchange 2003 服务器和 Exchange 2007,通过 Exchange 2003 服务器为它所在的域提供 RUS 功能。执行此操作后,ILM 2007 和 FIM 2010 都可以使用 Exchange 2003 置备模型来置备 Exchange。(请参见图 13。)

图 13:使用 RUS 置备 Exchange 2007

RUS 将按照在 Exchange 2003 置备模型中的操作方式,标识并完成 ILM 和 FIM 导出的任何启用邮件的对象的置备。RUS 将对 Exchange 2007 和 2003 的联系人和用户启用邮件。它还将完成邮箱的置备,而且如果 homeMDB 指向 Exchange 2003 服务器,RUS 将置备 Exchange 2003 邮箱。如果您仅需要 Exchange 2003 邮箱以及启用邮件的用户和联系人,并假设我们介绍的其他方法不适合您的部署,则您可以考虑使用 Exchange 2003。

但是请注意,如果您这样做,Exchange 2007 邮箱的置备将不完整。如果 homeMDB 指向 Exchange 2007 邮箱,则将置备该邮箱,但该邮箱不包含 Exchange 2007 所需的所有属性。您必须使用 Exchange 2007 置备机制来置备 Exchange 2007 邮箱。如果解决方案要求您置备 Exchange 2007 邮箱,请考虑使用 ILM 或自定义 PowerShell 脚本。

若要了解有关 Exchange 2003 和 Exchange 2007 共存的更多信息,请查看 TechNet 文章“如何在现有 Exchange Server 2003 组织中安装 Exchange 2007”。

推荐

如果环境中具有 ILM 2007 FP1 或 FIM 2010,则可以利用其置备邮箱,因为它们不仅可以减少手动管理任务,而且可以提高最终用户的工作效率和增强安全性。但是,如上所述,如果您的特定方案要求在 Exchange 2007 和 ILM 2007 FP1 服务器之间使用防火墙,则您可能需要借助外部进程来增强 ILM 2007 FP1 或 FIM 2010 与 Exchange 2007 的功能。您可以选择使用 ILM 2007 FP1 在 AD 中置备用户或联系人对象,然后利用 PowerShell 脚本对 ILM 已置备的对象启用邮件或邮箱功能。PowerShell 脚本在以下情况下可发挥作用:例如组织的策略不允许将 Exchange 收件人管理员权限授予 ILM 2007 或 FIM 2010 利用的服务帐户。

  Henna Kermani 是 Microsoft 身份和安全部门的一名开发人员。她居住在西雅图,距离她的宠物猫 1000 英里,她的宠物不愿意与她一起搬家。

Aung Oo 是 Microsoft 公共部门负责公民实践方面的一名架构师。 Aung 和他的妻子 Mya 一起居住在弗吉尼亚州的利斯堡。

Rob Ward 是 Microsoft 身份和安全部门的一名开发人员。他很喜欢美国西北部阴雨连绵的天气。