Exchange 2010 中的 Exchange 命令行管理程序

 

上一次修改主题: 2016-11-28

作者:David Strome

Exchange 命令行管理程序是一个功能强大的命令行管理界面,基于 Windows PowerShell v2 构建,使您能够管理 Microsoft Exchange Server 2010 的每一部分。您可能是一名管理员,需要每天管理邮箱,您也可能是一名开发人员,需要使用自定义业务线应用程序进行自动化管理。无论哪种方式,命令行管理程序都能使您更迅速、更高效地工作。

命令行管理程序是 Exchange 2010 管理模型的核心。Exchange 管理控制台 (EMC) 和 Exchange 2010 Web 界面都使用命令行管理程序处理操作。查看邮箱、创建通讯组或装入数据库时,EMC 和 Web 界面将运行命令行管理程序命令执行实际请求。EMC 或 Web 界面中可完成的所有操作都可以在命令行管理程序中完成,甚至更多。本文稍后将介绍更多有关如何有效利用这种多功能优势的信息并了解有关命令行管理程序的详细信息。

本文讨论以下内容:

  • 几个基本概念

  • 基于角色的访问控制

  • 启动 Exchange 命令行管理程序

  • 根据需要获取相关帮助

  • 在 EMC 中显示命令行管理程序命令

  • 设置命令输出的格式

几个基本概念

首先了解有关命令行管理程序的一些基本概念。

  • 基础的 Windows PowerShell 技术: Windows PowerShell v2 是一个功能强大而又异常灵活的命令行界面,基于 Microsoft .NET Framework 构建。它结合了几个命令行管理程序的优点,另外还增加了几项强大的新功能。

    除了 Windows PowerShell,Exchange 2010 还使用 Windows 远程管理 (WinRM) 2.0。无论是连接到本地服务器还是跨国家/地区的服务器,命令行管理程序始终通过 Internet 信息服务器 (IIS) 虚拟目录连接到 Exchange 2010 服务器。WinRM 是命令行管理程序会话与 Exchange 2010 服务器之间的通信机制。

  • Cmdlet: cmdlet 全称为“command-let”,是 Exchange 命令行管理程序中最小的功能单元。Cmdlet 具有描述性的“动词-名词”结构名称,类似于其他命令行管理程序中的内置命令,例如,cmd.exe 中的 Dir 命令。Cmdlet 用于管理对象,这些对象是表示 Exchange 的所有不同部分的属性集合。这些对象包括:服务器对象、邮箱对象、传输规则对象等等。各对象的每个实例(如邮箱)都表示为它自己的对象。

  • 参数: 参数用于向 cmdlet 提供输入,对应于对象的一个或多个属性。这些参数可以说明要创建或处理的对象,并指定该对象应更改的属性及其更改方式。

  • 标识: Identity 是一种特殊参数,用于任何可检索、修改或删除对象的 cmdlet。它使您能够访问指向 Exchange 2010 中要查看、修改或删除的特定对象的唯一标识符。

    Identity 参数也视为一个位置参数,表示可以直接指定参数值而无需指定参数名称。这意味着 Get-Mailbox -Identity "JohnE"Get-Mailbox "JohnE" 命令对 Exchange 的作用相同。如果 Parameter Position 属性为整数,则参数为位置参数。

  • 管道传输: 在命令行管理程序中,管道传输是指一个 cmdlet 在执行操作时使用另一个 cmdlet 的输出所进行的操作。您可以使用管道传输将两个或更多 cmdlet 串联在一起。例如,可以使用一个 cmdlet 收集数据,然后将这些数据传递给第二个 cmdlet 将数据筛选为一个子集,然后再将这些数据传递给第三个 cmdlet 以便只处理该子集。

有关所有这些概念的详细信息,请参阅 Exchange 2010 联机帮助中的 Exchange Management Shell Basics(英文网页)。

基于角色的访问控制

基于角色的访问控制 (RBAC) 是 Exchange 2010 中的权限模型。RBAC 使用管理角色定义用户可以执行的操作。例如,获得 RecipientManagement 角色的人可以管理邮箱、联系人、通讯组和其他类型的收件人对象。可以将分配给用户的管理角色的作用域设置为仅允许用户管理 Exchange 2010 组织中的特定收件人或服务器。如果将该分配的作用域设置为仅限 Seattle 中的收件人,则管理员将只能管理 Seattle 用户而不能管理其他用户。

注释注意:
本文讨论了 Exchange 2010 的测试版本,因此其功能、内置角色组成及可用性可能随时更改。

Exchange 2010 有若干现成的内置管理角色,用以将权限分配给管理员和用户。某些角色(如 OrganizationManagementRecipientManagement)使管理员能够管理其他用户。某些角色(如 MyOptionsMyDistributionGroups)使最终用户能够管理自己的邮箱和通讯组。角色分配对象和每个用户获得的角色定义了每个用户可以在组织中执行的操作。

RBAC 和命令行管理程序

那么为什么 RBAC 在命令行管理程序中很重要呢?正如本文稍后所述,命令行管理程序启动时将连接到 Exchange 2010 服务器并对您进行身份验证。作为身份验证过程的一部分,Exchange 2010 检查 RBAC 以查看您所分配到的角色。每个管理角色拥有获得该角色的用户可以使用的 cmdlet 及其参数的列表。当命令行管理程序创建环境时,只有您可以访问的 cmdlet 和参数会添加到环境中。

下图显示了 EMC 和命令行管理程序如何连接到 Exchange 2010 服务器。身份验证请求由 RBAC 接收,以确定您所拥有的角色并因此确定您可以访问的 cmdlet 和参数。在后续请求中,Windows PowerShell 和 RBAC 接收运行 cmdlet 的请求,验证该用户是否允许运行 cmdlet,然后为该用户运行 cmdlet。

RBAC 和 Windows PowerShell 概述

根据每个用户所拥有的管理角色不同,他或她可能只能看到随 Exchange 2010 附带的所有 cmdlet 的一个子集,了解这一点非常重要。例如,OrganizationManagement 角色可以管理 Exchange 2010 组织的方方面面。因此,OrganizationManagement 角色可以访问 Exchange 2010 所提供的几乎每个 cmdlet 和参数。相比之下,DiscoveryManagement 角色使用户能够搜索邮箱中的特定信息。DiscoveryManagement 是对应于非常具体功能的角色,执行这样的功能只需少量 cmdlet 和参数。这意味着获得 OrganizationManagement 角色的用户可以看到的 cmdlet 和参数将比获得 DiscoveryManagement 角色的用户多很多。

注释注意:
无论用户被分配何种角色,命令行管理程序中的帮助文件和联机帮助始终都会显示 cmdlet 上的所有可用参数。

获得 Exchange 权限

向用户分配角色时应考虑其工作角色,应向用户分配与其工作最相符的管理角色。如果角色组合能够更好地匹配用户的工作,则可以根据需要向每个用户分配多个角色。如果多个用户具有相同的工作角色,可以考虑将他们添加到通用安全组 (USG),然后将所需的角色分配到该 USG。这样,只需从该 USG 添加和删除成员即可控制权限。

最后,尽管 Exchange 2010 提供了多个内置角色,但这些角色可能并不能完全满足您组织的要求。在这种情况下,您可以创建自己的自定义角色。使用 RBAC 可以复制内置角色,然后删除 cmdlet 和参数以创建新角色,该角色仅能执行您所希望其执行的操作。例如,如果要让技术支持团队能够创建新邮箱但不能指定邮箱创建在哪个数据库上,则可以创建不带 New-MailboxEnable-Mailbox 上的 Database 参数的新角色。

有关 RBAC 的详细信息,请参阅 Understanding Role Based Access Control(英文网页)。

启动 Exchange 命令行管理程序

如前所述,命令行管理程序基于 Windows PowerShell 构建。使用 Exchange 命令行管理程序快捷方式打开命令行管理程序时,将打开 Windows PowerShell 并运行某些脚本。这些脚本将查找最合适的 Exchange 2010 服务器并与之连接。在连接过程中,Exchange 将检查是否允许连接。如果允许连接,Exchange 将随后查找已经分配了的 RBAC 管理角色。最后,将创建包含所有可用 cmdlet 的环境,即可开始使用。

为什么所有这些信息对您很重要?如果未使用 Exchange 命令行管理程序快捷方式启动 Windows PowerShell,并且尝试运行 Exchange cmdlet(如 Get-Mailbox),则会出现错误。这是为什么呢?因为 Get-Mailbox cmdlet 不存在于核心 Windows PowerShell cmdlet 集中。命令行管理程序连接到 Exchange 2010 服务器供您使用之后,必须由命令行管理程序添加 Get-Mailbox

所以,首先应该做的事为:打开 Exchange 命令行管理程序。只需依次单击“开始”、“所有程序”、“Microsoft Exchange Server 2010”和“Exchange 命令行管理程序”即可。

注释注意:
“Microsoft Exchange Server 2010”菜单中将出现“Exchange 命令行管理程序(本地 PowerShell)”选项。本地 Windows PowerShell 版本的 Exchange 命令行管理程序使用的 Windows PowerShell 管理单元包含所有可用于 Exchange 2010 的 cmdlet。其不使用 Windows PowerShell 的远程功能,而使用限制版本的 RBAC。
使用“Exchange 命令行管理程序(本地 PowerShell)”快捷方式可在边缘传输服务器上使用命令行管理程序。如果在边缘传输服务器以外的任何服务器角色上打开命令行管理程序,建议您避免使用本地 PowerShell 版本的命令行管理程序,除非所遇到的问题只有通过该选项才能解决。
在将来版本的 Exchange 2010 中,本地版本的命令行管理程序将从所有服务器角色中删除,但边缘传输服务器角色除外。

以下屏幕截图显示了连接到 Exchange 2010 服务器并导入用户可访问的 cmdlet 的命令行管理程序。

连接到 Exchange 2010 服务器的命令行管理程序

Windows PowerShell 将打开并连接到 Exchange 2010 服务器,然后根据分配给您的 RBAC 管理角色加载所有可以访问的 cmdlet 和参数。连接之后,可以照常运行 cmdlet。如果希望看到可以访问的 cmdlet 列表,Get-Command cmdlet 会很有用。

根据需要获取相关帮助

对于 Exchange 2010,Microsoft Exchange 用户培训工作组已经编写了一套全面的文档,位于 Exchange 命令行管理程序中,可通过联机方式获得。

在命令行管理程序中,您会发现在学习导航命令行管理程序时,Get-Help cmdlet 是宝贵的资源。另外,请务必查看联机帮助。它包括解释 Exchange 中所有功能以及如何使用命令行管理程序进行管理的主题。可以通过 Microsoft Exchange Server 2010 Beta 访问 Exchange 2010 联机帮助。

命令行管理程序中的帮助

在命令行管理程序中,可以使用 Get-Help cmdlet 以多种形式访问特定 cmdlet 的帮助。键入 Get-Help 即可显示常规的帮助信息。如果应用参数,则 Get-Help cmdlet 的功能更强大。

若要获得有关某个特定 cmdlet 的帮助,请键入 Get-Help,后接希望获取相关信息的 cmdlet,例如 Get-Help Get-SystemMessage。默认情况下,命令行管理程序会显示对 cmdlet 及其语法的说明。它会隐藏可能并非所有管理员都使用的其他部分。

可以使用 DetailedFullExample 参数控制所显示的信息。只需将其添加到命令的末尾即可。例如,Get-Help -Full 返回所有可用于某个 cmdlet 的帮助部分。亲自试验一下这些命令,了解针对您选择的 cmdlet 会显示哪些信息。

如果要检索有关特定参数或某个 cmdlet 的参数信息,可以将 Parameters 参数与 Get-Help cmdlet 配合使用。例如,如果要查看 Set-Mailbox cmdlet 上包含单词“quota”的所有参数及其说明,请键入 Get-Help Set-Mailbox -Parameter *quota*

Exchange Server 2010 联机帮助中的 Getting Help 主题列出了所有可以使用的角色、组件和功能值。

在 EMC 中显示命令行管理程序命令

每次通过单击新项目或更改某些项目(如邮箱)刷新视图时,Exchange 管理控制台将运行一个命令行管理程序命令。Exchange 2010 中的 EMC 有一些新功能,介绍如何使用命令行管理程序命令完成所执行的操作。

只要在 EMC 中执行某些操作时,“Windows PowerShell 命令日志”就会记录所运行的每个命令行管理程序命令。可以在打开 EMC 后的任何时候启动日志。它将保持打开状态并继续记录命令,直到停止日志记录或者关闭 EMC。如果要捕获日志,则需要在每次打开 EMC 时启动日志。

日志包含关于每个已记录命令的以下信息:

  • 开始执行时间: 该字段记录命令行管理程序命令开始运行的时间。

  • 结束执行时间: 该字段记录命令行管理程序命令结束的时间。

  • 执行状态: 该字段记录命令是否已成功完成。

  • 命令: 该字段记录已运行的命令。包含 cmdlet、参数及其值。

为了帮助查看每个已运行命令的详细信息,当选中某个命令时,日志条目列表下的窗口中将显示该命令的详细信息。如果该命令包含任何输出,该信息也会显示在此窗口中。

可以将日志输出到日志文件或将命令复制到剪贴板,以便直接在命令行管理程序中使用该命令。

Windows PowerShell 命令日志

当对某个对象的属性进行更改时,可以访问“Exchange 命令行管理程序命令”窗口。在“属性”窗口中进行更改后,可通过单击 图标访问“命令行管理程序命令”窗口。如果已应用“属性”窗口中所做的更改,则“命令行管理程序命令”窗口会显示将要运行的命令。该命令包括 cmdlet、参数及其值。可以将命令复制到剪贴板中,直接在命令行管理程序中使用该命令。

最后,当使用向导创建或修改 Exchange 对象时,EMC 中的所有向导都包含所创建的命令。与 EMC 公开命令行管理程序命令的其他方式一样,向导完成窗口会显示将要运行的命令。另外,还可以将其复制到剪贴板,以便直接在命令行管理程序中使用。

设置命令输出的格式

默认情况下,当屏幕上显示命令输出时,命令行管理程序仅显示每个对象的可用属性的子集。这是为什么呢?因为每个对象可能包含多种属性,命令行管理程序会优化显示,以便仅包含那些可能对您最有用的属性。但是,若要轻松访问和查看某个对象的所有属性,可以将命令输出通过管道传输到以下三种格式的 cmdlet:Format-ListFormat-TableFormat-Wide

Format-ListFormat-Table 是最常用的 cmdlet,我们来更详细地了解一下它们。

Format-List cmdlet 接受来自管道的输入并将每个对象的所有指定属性以垂直列表格式输出。通过使用 Property 位置参数,可以指定要显示的属性。如果调用 Format-List cmdlet 而未指定任何参数,则将输出所有属性。Format-List cmdlet 会自动换行,而不是截断行。Format-List cmdlet 的最佳用途之一就是覆盖某个 cmdlet 的默认输出,以便检索其他信息或更受关注的信息,如 Get-DistributionGroup | Format-List Name, *OnlyFrom, PrimarySmtpAddress, *Size* 示例中所示。

可以使用 Format-Table cmdlet 以表格格式显示项目,其中包含标签标题和属性数据列。默认情况下,许多 cmdlet(如 Get-MailboxGet-JournalRule cmdlet)都使用表格格式输出。Format-Table cmdlet 的其中两个参数是 PropertiesGroupBy 参数。这些参数的作用与其在 Format-List cmdlet 中的作用完全相同。若要完全显示较长的属性信息行,而不是在行的末尾截断,请将 Wrap 参数与 Format-Table cmdlet 结合使用,如以下示例所示:Get-Mailbox -Database Research | Format-Table Name, ProhibitSendQuota, Database -Wrap

另外,还可以使用 Format-ListFormat-Table cmdlet 指定带有部分属性名称的通配符 "*"。如果包含通配符,则可以匹配多个属性,而不必分别键入每个属性名。例如,Get-Mailbox | Format-List Email* 返回以 Email 开头的所有属性。

使用 Exchange 2010 可以减少键入的内容并节省时间!

详细信息

若要了解有关 Exchange 2010 和 Exchange 命令行管理程序的详细信息,请参阅以下资源:

David Strome - Microsoft Exchange Server 用户培训资深技术撰稿人