深度解析 SMA功能:SMA PowerShell模块
截至目前,您可能已经了解了服务管理自动化的所有出色特性,比如通过 Windows Azure 包管理门户来授权 Runbooks,创建资产,按计划手动启动作业,导入集成模块和查看作业输出。现在如果我告诉您,以编程的方式通过命令行可以更加轻松地完成以上内容会怎样呢?不论您是想简单地运行 SMA,还是只是想看看诸如批量 Runbook 导入的几个关键操作脚本,都可以用 SMA PowerShell 模块完成。
SMA PowerShell 模块入门
SMA 提供了一个 PowerShell 模块,安装于 SMA Web 服务中,您也可以将它独立安装在任一主机上,从而远程管理您的 SMA 安装:
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 命令的有关数据:
要想获取如何使用特定 SMA 命令的详细信息,请输入:
PS C:\> Get-Help Some-Command
但是将“Some-Command”替换成 SMA 命令的话,您可能想要更多相关信息。那么可以选择添加“–Detailed”或“–Full”来获取该命令的更多信息:
如果您不想在 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”。
注意如果您使用一个负载平衡器通过多个SMA Web 服务来达到高可用性,而且想在负载平衡器端点指向命令,而不是直接在SMA Web 服务,请注意您可能需要使用有命令的基本身份验证( -AuthenticationType Basic ),从而使用户凭据可以从负载平衡器传递至SMA Web 服务。
运行命令
以下是一个运行 SMA 命令的例子,命令提供了输出类型:
您会发现使用命令的话,不断地将 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 服务连接参数。
附加功能
虽然大多数 SMA PowerShell 命令都通过 SMA 门户的脚本界面来提供相同特性,但模块同样为如今无法在门户中完成的管理操作提供命令:
管理配置
SMA PowerShell 模块附带两个命令——Set-SmaAdminConfiguration 和 Get-SmaAdminConfiguration,这两个命令可以让您获取并设置 SMA 的管理配置设置,如“drain time”(用于正常关机)、选择加入客户体验改善计划(CEIP)和 Runbook 作业从 SMA 数据库清除之前的最大停留时间。
Runbook Worker 部署
PowerShell 模块还为管理配置运行 Runbooks 的 Runbook Workers 提供了命令。部署可通过 Get-SmaRunbookWorkerDeployment 和 New-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 作为一个新作业异步启动,并打印出作业信息的过程:
总结
希望您对所有内容都已经有了很好的理解,包括使用服务管理自动化 PowerShell 命令,以及命令自身是如何工作的。不仅可以使用 SMA 自动化您的 IT 和业务流程,甚至可以通过使用这些命令来自动化 SMA 本身!SMA 团队希望看到您编写各种 Runbooks 和脚本,以便充分利用 SMA 和 SMA PowerShell 模块提供的功能。
下次再见。祝您的自动化工作顺利!