深度解析 SMA功能:SMA PowerShell模块

截至目前,您可能已经了解了服务管理自动化的所有出色特性,比如通过 Windows Azure 包管理门户来授权 Runbooks,创建资产,按计划手动启动作业,导入集成模块和查看作业输出。现在如果我告诉您,以编程的方式通过命令行可以更加轻松地完成以上内容会怎样呢?不论您是想简单地运行 SMA,还是只是想看看诸如批量 Runbook 导入的几个关键操作脚本,都可以用 SMA PowerShell 模块完成。

SMA PowerShell 模块入门

SMA 提供了一个 PowerShell 模块,安装于 SMA Web 服务中,您也可以将它独立安装在任一主机上,从而远程管理您的 SMA 安装:

clip_image002

SMA PowerShell 模块提供了 40 个命令,允许您在 WAP 的自动化门户中执行大部分脚本操作。您或许会问,这些命令可靠吗?嗯,将命令作为 SMA Web 服务的一部分来安装的原因在于 SMA Web 服务的安装程序实际上是使用SMA 命令来执行针对 Web 服务的大量后期部署任务,比如向 SMA 中导入自带的 Runbooks 和集成模块,所以用户第一次使用 SMA 时,它们就是可用的,无需其他操作。

下面来检查一下 SMA PowerShell 模块提供的所有命令的强大功能,打开一个安装了 SMA 模块的主机上的 PowerShell 控制台,并输入:

PS C:\> Get-Command -Module Microsoft.SystemCenter.ServiceManagementAutomation

这将返回所有 SMA 命令的有关数据:

clip_image004

要想获取如何使用特定 SMA 命令的详细信息,请输入:

PS C:\> Get-Help Some-Command

但是将“Some-Command”替换成 SMA 命令的话,您可能想要更多相关信息。那么可以选择添加“–Detailed”或“–Full”来获取该命令的更多信息:

clip_image006

如果您不想在 PowerShell 控制台中学习,而是想在 Web 浏览器中了解更多相关内容,还可以查看 SMA PowerShell 模块命令参考

 

SMA 命令是如何工作的

在 SMA 命令中运行 Get-Help,或者查看上面链接中的 SMA 命令参考,您可能会注意到,似乎所有的命令都有着少量相同参数,即 –WebServiceEndpoint、Port、AuthenticationType 和 Credential。这是因为我们所有的命令(有一个例外,稍后会讲到)都是通过与 SMA Web 服务对话来完成任务的。WebServiceEndpoint 参数是指协议(HTTP/HTTPS)和 Web 服务的 IP 地址或主机名称,Port 参数是指 Web 服务的端口(默认值为 9090),AuthenticationType 指示命令应该使用 Windows 还是 Basic Auth (基本身份验证)来验证 Web 服务,而 Credential 参数则可以让您作为其他用户运行命令。如果您在 AuthenticationType 选择 Basic,那么您还要提供 Credential 参数,因为命令不知道当前用户转向使用 Basic Auth 的密码。所有参数一起使用是这样的:

PS C:\> Get-SmaRunbook -WebServiceEndpoint https://localhost -Port 9090 -AuthenticationType Windows -Credential $cred

当然,只要您的 SMA Web 服务使用的是默认端口,并且运行命令的当前用户已经访问了 Web 服务,那么您只需为要连接的命令提供 SMA Web 服务的终结点:

PS C:\> Get-SmaRunbook -WebServiceEndpoint https://localhost

默认情况下,SMA Web 服务是为 HTTPS 而设立的一个自签名 SSL 证书,所以您的 WebServiceEndpoint 参数应该使用“https://”,而不是“https://”。如果您想通过 HTTP 来连接 SMA Web 服务,需要在 IIS 中为 SMA 添加一个新的网站绑定。SMA 命令默认允许使用自签名连接 SMA Web 服务,但是如果您想在无需使用证书颁发机构签名的证书就连接 SMA 实例的情况下成功配置 SMA 命令,请转至 C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Microsoft.SystemCenter.ServiceManagementAutomation\Authentication.config,将“AcceptSelfSignedCertificate”改为“False”。

clip_image008

注意如果您使用一个负载平衡器通过多个SMA Web 服务来达到高可用性,而且想在负载平衡器端点指向命令,而不是直接在SMA Web 服务,请注意您可能需要使用有命令的基本身份验证( -AuthenticationType Basic ),从而使用户凭据可以从负载平衡器传递至SMA Web 服务。

运行命令

以下是一个运行 SMA 命令的例子,命令提供了输出类型:

clip_image009

您会发现使用命令的话,不断地将 Web 服务连接参数(WebServiceEndpoint、Port、AuthenticationType、Credential)传递到每个命令是十分繁琐的。您可能想知道为什么我们不提供一个单独的命令来设置与 Web 服务的连接,那么当所有其他命令被调用时,可以固定使用这个连接,而不必每次都传递这些参数。与 Virtual Machine Manager PowerShell 模块中的 Get-SCVMMServer 命令或 Windows Azure PowerShell 模块中的 Select-AzureSubscription 命令类似。我们想确保 SMA Runbooks 中的 SMA 命令简单易用(稍后将详细介绍),这意味着我们需要让每个命令的功能完全独立。在不同的 PowerShell 会话中,PowerShell 工作流可以运行同一个工作流中写入的命令。,也就是说,运行取决于某些之前写入会话的任何命令都可能失败。解决的办法是在 InlineScript 活动中运行这种类型的命令,但对于 SMA 命令来说,我们想与 PowerShell 工作流完全兼容,因为我们提供了一个运行 PowerShell 工作流的引擎。如果我们不提供能与 PowerShell 工作流完美配合的 PowerShell 模块,谁还能提供呢!

幸运的是,有一种简便的方法可以将这些参数传递至每个 SMA 命令,并且无需每次都把它们写出来,这种方法就是展开。它允许您将一组参数定义为哈希表,并把这组参数传递给任一命令。从下图中可以看到,通过这种方法可以很容易为您的 SMA 命令添加 SMA Web 服务连接参数。

clip_image011

附加功能

虽然大多数 SMA PowerShell 命令都通过 SMA 门户的脚本界面来提供相同特性,但模块同样为如今无法在门户中完成的管理操作提供命令:

管理配置

SMA PowerShell 模块附带两个命令——Set-SmaAdminConfigurationGet-SmaAdminConfiguration,这两个命令可以让您获取并设置 SMA 的管理配置设置,如“drain time”(用于正常关机)、选择加入客户体验改善计划(CEIP)和 Runbook 作业从 SMA 数据库清除之前的最大停留时间。

Runbook Worker 部署

PowerShell 模块还为管理配置运行 Runbooks 的 Runbook Workers 提供了命令。部署可通过 Get-SmaRunbookWorkerDeploymentNew-SmaRunbookWorkerDeployment 命令来管理。要了解更多关于 Runbook Worker 部署的信息,请查看 SMA Runbook Worker 部署中的帮助主题。

SMA 产品许可证

您还可以通过命令查看和更改 SMA 的许可证信息。Get-SmaLicense 返回您的 SMA 安装到期日期,如果您安装的是 SMA 评估版本,那么这是十分有用的。Set-SmaLicense 则可以让您输入 System Center 产品密钥,从而将评估版本变为完整的产品版本。

可移植模块生成

唯一不经过 Web 服务的 SMA 命令是 New-SmaPortableModule。这个命令允许您生成集成模块,否则这些模块无法导入 SMA。更多关于可移植模块和使用该命令的信息,请参见这篇博客。

在SMA 中使用SMA 命令

另一个关于 SMA PowerShell 模块有趣的一点是,在 SMA 中包含了一个可直接使用的集成模块,这意味着您可以直接在 Runbooks 中使用 SMA 命令,而无需其他操作。例如,下图演示的是一个 SMA Runbook 将另一个 SMA Runbook 作为一个新作业异步启动,并打印出作业信息的过程:

clip_image013

总结

希望您对所有内容都已经有了很好的理解,包括使用服务管理自动化 PowerShell 命令,以及命令自身是如何工作的。不仅可以使用 SMA 自动化您的 IT 和业务流程,甚至可以通过使用这些命令来自动化 SMA 本身!SMA 团队希望看到您编写各种 Runbooks 和脚本,以便充分利用 SMA 和 SMA PowerShell 模块提供的功能。

下次再见。祝您的自动化工作顺利!