在 Shell 中使用 RollAlternateserviceAccountCredential.ps1 脚本

适用于:Exchange Server 2013

可以使用 Exchange Server 2013 中的 RollAlternateServiceAccountPassword.ps1 脚本更新备用服务帐户凭据 (ASA 凭据) ,并将更新分发到指定的客户端访问服务器。

注意

The Exchange Management Shell doesn't load scripts automatically. 你需要在所有脚本前面 加上 .\ 例如,若要运行RollAlternateServiceAccountPassword.ps1脚本,请键入 .\RollAlternateServiceAccountPassword.ps1

此脚本仅提供英文版本。

有关如何使用和编写脚本的详细信息,请参阅Scripting with the Exchange Management Shell

语法

RollAlternateServiceAccountPassword.ps1 -Scope <Object> -Identity <Object> -Source <Object> -

详细说明

你必须先获得权限,然后才能执行此过程或多个过程。 若要查看所需的权限,请参阅"客户端访问权限"主题中的"客户端访问安全性"条目。

备用服务帐户凭据脚本的详细技术信息

此脚本简化了 ASA 凭据的安装和维护。 创建 ASA 凭据并设置适当的服务主体名称后,即可使用脚本将该凭据分发给所有目标客户端访问服务器。

要使用脚本,必须确定要将哪些服务器作为目标以及要将哪个凭据用作 ASA 凭据。

服务器作用域

可以选择使脚本以林中的所有客户端访问服务器、特定客户端服务器阵列的所有成员或特定服务器作为目标。 可用参数为 ToEntireForestToArraryMembersToSpecificServers。 如果使脚本以特定服务器或特定服务器阵列的成员作为目标,则必须使用要用作目标的服务器或服务器阵列名称指定 Identity 参数。

凭据来源

可以使用脚本从现有服务器复制备用服务帐户密码。 或者,也可以指定想要使用的帐户,让脚本为此帐户生成一个新密码。 可用参数为 GenerateNewPasswordForCopyFromGenerateNewPasswordFor 参数要求指定以下格式的帐户字符串:DOMAIN\Account Name。 如果要使用计算机帐户,则必须在帐户名称末尾附加上"$",例如,CONTOSO\ClientServerAcct$。 CopyFrom 参数将现有客户端访问服务器的名称作为凭据来源。

为凭据生成一个新密码

已使用脚本创建密码。 无需用户输入。 脚本将尝试向所有目标计算机分发密码,然后将尝试用新生成的密码更新 Active Directory 帐户凭据。

新生成的密码长度为 73 个字符,并且能满足标准强密码要求。 如果密码要求不同,则可能需要手动设置密码,然后将其复制到目标服务器。

为了防止服务中断,除添加新密码外,脚本还会检查各个客户端访问服务器并维护当前的密码。 运行脚本后,共享的 ASA 凭据将能够使用两个密码中的任意之一:存储在 Active Directory 中的当前密码或尚未在 Active Directory 中进行设置的新密码。

将从目标服务器中删除所有不再有效的密码(如过期密码)。 如果无法更改 Active Directory 中的密码(可能因为密码已经过期),脚本将尝试重置密码。 这将要求帐户运行脚本,以便有权重置 Active Directory 计算机帐户密码或用户帐户密码,具体重置哪个密码取决于备用服务帐户是计算机帐户还是用户帐户。

如果没有为所有目标客户端访问服务器成功更改密码,则更新 Active Directory 密码可能会导致身份验证失败。 如果在无人值守模式下运行脚本,除非已成功更新所有目标客户端访问服务器,否则将不会使用新密码更新 Active Directory 密码。 如果在有人值守模式下运行脚本,则将询问您是否要更新 Active Directory 中的密码。

创建计划任务以自动执行密码维护

如果希望脚本创建计划任务,从而不间断地对密码进行维护,请使用 CreateScheduledTask 参数。 此参数需要您要创建的任务的名称字符串。

注意

运行脚本并验证其在有人值守模式下运行正常,然后创建无人值守计划任务。

该脚本在脚本所在的文件夹中创建一个 .cmd 文件。 然后,它会创建一个任务,每三周运行一次 .cmd 文件。 可以使用 Windows 任务计划程序来修改计划任务,例如,将其设置为运行频率或多或少。 默认情况下,任务将作为当前登录的用户运行。 此外,该脚本仅在用户登录到计算机时运行。 建议修改计划任务以运行用户是否已登录。 如果该帐户具有重置密码的 Active Directory 权限以及 Exchange 企业管理员角色,还可以选择在不同的帐户下运行它。 创建计划任务时,脚本将自动在无人参与模式下运行。

脚本作用域范围之外的任务

脚本不会管理 ASA 凭据的 SPN 或允许从服务器中删除备用服务帐户。 要从服务器中删除备用服务帐户,请参阅为负载平衡的客户端访问服务器配置 Kerberos 身份验证中的关闭 Kerberos 身份验证部分。

脚本疑难解答

建议先运行脚本并验证其在参与模式下运行正常,然后再创建无人参与计划任务。 有关疑难解答信息,请参阅 对 RollAlternateServiceAccountCredential.ps1 脚本进行故障排除

验证脚本

交互运行脚本输出与 -verbose 标志时,该脚本输出应指示哪些脚本操作是成功的。 要确认已更新客户端访问服务器,可以验证 ASA 凭据上的上次修改的时间戳。 以下示例生成了客户端访问服务器的列表以及上次更新备用服务帐户的时间。

Get-ClientAccessServer -IncludeAlternateServiceAccountCredentialstatus |Fl Name, AlternateServiceAccountConfiguration

还可以在运行脚本的计算机上检查事件日志。 脚本的事件日志条目位于应用程序事件日志中,并且来自来源 MSExchange Management Application。 下表列出了记录的事件和这些事件的含义。

脚本事件 ID 及其说明

Event 说明
14001 开始
14002 成功(信息)
14003 成功,但有警告。

脚本遇到了一些问题,但是能够克服这些问题,或者,用户输入已确认这些问题不是必需的。 如果在交互模式下运行脚本,请读取脚本输出结果以便进一步了解关于警告的详细信息。
14004 失败

If the script runs as a scheduled task, its results are logged to the Exchange server Logging folder in a subfolder called RollAlternateServiceAccountPassword.

可以使用日志来确认已成功运行任务。

参数

参数 必需 说明
ToEntireForest 可选 ToEntireForest 参数将脚本定向到林中的所有客户端访问服务器。
ToArrayMembers 可选 ToArrayMembers 参数将脚本面向特定客户端访问服务器阵列的所有成员。

注意:如果使用 ToArrayMembers 参数或 ToSpecificServers 参数,则需要使用 Identity 参数指定服务器名称或服务器数组名称。
ToSpecificServers 可选 ToSpecificServers 参数将脚本定向到特定服务器。

注意:如果使用 ToArrayMembers 参数或 ToSpecificServers 参数,则需要使用 Identity 参数指定服务器名称或服务器数组名称。
标识 必需 Identity 参数指定客户端访问服务器数组的名称或要面向的特定服务器的名称。
GenerateNewPasswordFor<String> 可选 GenerateNewPasswordFor 参数指定脚本应为 ASA 生成新密码。 该字符串值必须是以下格式的 ASA 帐户:域\帐户名。 如果使用的是计算机帐户,则必须在帐户名称末尾附加上 $ 字符。
CopyFrom<字符串> 可选 CopyFrom 参数指定从另一台客户端访问服务器复制凭据。 指定的字符串值是客户端访问服务器的名称。
Mode 可选 模式开关指定脚本是在参与模式还是无人参与模式下运行。 无人值守模式不会提示用户输入内容,并且会在必要时自动选择更多保守选项。
CreateScheduledTask<字符串> 可选 CreateScheduledTask 参数指示脚本创建计划任务以执行 ASA 凭据更新。 字符串值是将要创建的计划任务的名称。

注意:此脚本在脚本所在的文件夹中创建 .cmd 文件。 计划任务将每三周运行一次 .cmd 文件。 可以直接在 Windows 任务计划程序中编辑任务,以更改任务的运行频率。
WhatIf 可选 WhatIf 开关指示命令模拟它将对 对象执行的操作。 通过使用 WhatIf 开关,可以查看会发生哪些更改,而无需应用任何这些更改。 无需使用 WhatIf 开关指定值。
确认 可选 Confirm 开关令此命令暂停处理,并且需要你在继续处理之前确认此命令将执行的操作。 无需为 Confirm 开关指定值。
Verbose 可选 Verbose 参数指示脚本执行详细日志记录,以便将有关脚本操作的其他信息写入日志文件。
Debug 可选 Debug 参数指示脚本在调试模式下运行。 此参数应该用于确定脚本失败的原因。

示例

示例 1

此示例使用脚本将凭据推送到林中的所有客户端访问服务器,以便进行首次安装。

.\RollAlternateserviceAccountPassword.ps1 -ToEntireForest -GenerateNewPasswordFor "Contoso\ComputerAccount$" -Verbose

示例 2

此示例为用户帐户 ASA 凭据生成新密码,并将该密码分发给客户端访问服务器阵列中那些名称与*邮箱*相匹配的所有成员。

.\RollAlternateserviceAccountPassword.ps1 -ToArrayMembers _mailbox_ -GenerateNewPasswordFor "Contoso\UserAccount" -Verbose

示例 3

此示例将安排一个名为"Exchange RollAsa"的每月执行一次的自动密码滚动计划任务。 将使用一个由脚本生成的新密码在整个林中更新所有客户端访问服务器的 ASA 凭据。 已创建计划任务,但未运行脚本。 运行计划任务后,将在无人值守模式下运行脚本。

.\RollAlternateServiceAccountPassword.ps1 -CreateScheduledTask "Exchange-RollAsa" -ToEntireForest -GenerateNewPasswordFor 'contoso\computerAccount$'

示例 4

此示例更新名为 CAS01 的客户端访问服务器阵列中的所有客户端访问服务器的 ASA 凭据。 将从域 Contoso 中的 Active Directory 计算机帐户 ServiceAc1 中获取凭据。

.\RollAlternateserviceAccountPassword.ps1 -ToArrayMembers "CAS01" -GenerateNewPasswordFor "CONTOSO\ServiceAc1$"

示例 5

此示例说明,在要增加服务器阵列大小或在进行维护后重新引入阵列成员的情况下,如何才能使用脚本将 ASA 分发给新计算机或重新投入使用的计算机。

在客户端访问服务器接收流量之前,需要更新 ASA 凭据。 从已正确配置的任何客户端访问服务器复制共享 ASA 凭据。 例如,如果服务器 A 当前具有一个正常工作的 ASA 凭据,并且刚刚将服务器 B 添加到数组,则可以使用脚本将凭据 (包括密码) 从服务器 A 复制到服务器 B。如果在上次滚动密码时服务器 B 已关闭或尚未成为数组的成员,则这很有用。

.\RollAlternateServiceAccountPassword.ps1 -CopyFrom ServerA -ToSpecificServers ServerB -Verbose