使用全局资产简化 Service Management Automation runbook 创作

重要

此版本的 Service Management Automation (SMA) 已终止支持。 建议 升级到 SMA 2022

全局资产可用于自动化环境中的所有 Runbook。 你可使用管理门户中的 Automation 工作区或利用 Windows PowerShell 中的适当 cmdlet 来创建和配置它们。 通过 Runbook,你可以使用 RunbookConstructs 模块中的活动检索和设置全局资产的值。 Windows PowerShell cmdlet 可用于 Service Management Automation 中的 Runbook,但建议使用活动,因为它们更高效,因为它们不必通过自动化 Web 服务工作。

获取或设置凭据

Automation 凭据是可与 Windows PowerShell 命令一起使用的用户名和密码或是上载到服务器的证书。 凭据的属性安全地存储在自动化数据库中,并且可以通过 Get-AutomationPSCredential 或 Get-AutomationCertificate 活动在 runbook 中访问 。

用于管理凭据的 PowerShell

可以通过 Windows PowerShell 使用下表中的 cmdlet 在 Service Management Automation 中创建和管理凭据。

Cmdlet 说明
Get-SmaCertificate 检索自动化证书。
Get-SmaCredential 检索自动化 PowerShell 凭据。
Remove-SmaCertificate 删除自动化证书。
Remove-SmaCredential 删除自动化 PowerShell 凭据。
Set-SmaCertificate 创建新证书,或设置现有证书的属性(包括上载证书文件以及为 .pfx 设置密码)。
Set-SmaCredential 创建新的自动化 PowerShell 凭据或设置现有凭据的属性。

用于处理凭据的 PowerShell

可以使用下表中的活动访问 Runbook 中的凭据。

活动 说明
Get-AutomationCertificate 在 Runbook 中获取要使用的证书。
Get-AutomationPSCredential 获取要在 runbook 中使用的用户名/密码。

注意

应该避免在 Get-AutomationPSCredential 和 Get-AutomationCertificate 的 Name 参数中使用变量,因为这会使发现 runbook 和自动化变量之间的依赖关系变得复杂 。

在管理门户中创建 PowerShell 凭据

  1. 选择“自动化”工作区。

  2. 在窗口顶部,选择“ 资产”。

  3. 在窗口底部,选择“ 添加设置”。

  4. 选择“ 添加凭据”。

  5. “凭据类型”下拉列表中,选择“PowerShell 凭据”

  6. 在“名称”框中输入凭据 的名称

  7. 选择向右箭头。

  8. 输入每个属性的值。

  9. 选择检查标记以保存凭据。

在管理门户中创建证书

管理门户

  1. 选择“自动化”工作区。

  2. 在窗口顶部,选择“ 资产”。

  3. 在窗口底部,选择“ 添加设置”。

  4. 选择“ 添加凭据”。

  5. “凭据类型”下拉列表中,选择“证书”

  6. 在“名称”框中输入证书 的名称

  7. 选择向右箭头。

  8. 选择“ 浏览文件 ”并导航到.cer或 .pfx 文件。

  9. 如果选择了 .pfx 文件,则提供其密码。

  10. 选择检查标记以保存证书。

使用 PowerShell 创建凭据

下面的示例命令演示如何创建新凭据。

$webServer = 'https://MyWebServer'
$port = 9090
$credName = 'MyCredential'
$user = 'contoso\MyUser'
$pwd = ConvertTo-SecureString -String 'P@$$w0rd' -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$pwd

Set-SmaCredential -WebServiceEndpoint $webServer -port $port -Name $credName -Value $cred

使用 Service Management Automation 中的 Windows PowerShell 创建新 PowerShell 证书

下面的示例命令演示如何通过导入证书文件来创建新证书。

$webServer = 'https://MyWebServer'
$port = 9090
$certName = 'MyCertificate'
$path = 'c:\certs\MyCertificate.pfx'
$certPwd = ConvertTo-SecureString -String 'P@$$w0rd' -AsPlainText -Force

Set-SmaCertificate -WebServiceEndpoint $webServer -port $port -Name $certName -Path $certPath -Password $certPwd

在 runbook 中使用 PowerShell 凭据

可 runbook 中使用 Get-AutomationPSCredential 活动检索 PowerShell 凭据。 这会返回可以在工作流中使用的 PSCredential 对象。

  • 下面的示例命令演示如何在 Runbook 中使用 PowerShell 凭据。 在此示例中,凭据与 InlineScript 活动配合使用,以便运行一组使用备用凭据的命令。

    $myCredential = Get-AutomationPSCredential -Name 'MyCredential'
    InlineScript {
       <Commands>
    } -PSComputerName $ServerName -PSCredential $myCredential
    

管理 SMA 连接

Automation 连接包含从 Runbook 连接到服务或应用程序所需的信息。 此信息在应用程序的模块中定义,通常包含诸如用户名和密码以及要连接到的计算机等信息。 可能还需要证书或订阅 ID 之类的其他信息。 连接的属性安全地存储在自动化数据库中,可以通过 Get-AutomationConnection 活动在 runbook 中进行访问。

Windows PowerShell Cmdlet

可以使用下表中的 Windows PowerShell cmdlet 创建和管理凭据。

Cmdlet 说明
Get-SmaConnection 检索特定连接中每个字段的值。
Get-SmaConnectionField 检索特定连接类型的字段定义。
Get-SmaConnectionType 检索可用连接类型。
New-SmaConnection 创建新连接。
Remove-SmaConnection 删除现有连接。
Set-SmaConnectionFieldValue 设置现有连接的一个特定字段的值。

Runbook 活动

可以通过下表中的活动在 runbook 中访问连接。

活动 说明
Get-AutomationConnection 获取要在 runbook 中使用的连接。

在管理门户中创建连接

  1. 选择“自动化”工作区。

  2. 在窗口顶部,选择“ 资产”。

  3. 在窗口底部,选择“ 添加设置”。

  4. 选择“添加连接”。

  5. “连接类型”下拉列表中,选择一种连接类型。

  6. 在“名称”框中输入连接 的名称

  7. 选择向右箭头。

  8. 为每个属性输入一个值。

  9. 选择检查标记以保存连接。

使用 Windows PowerShell 创建连接

下面的示例命令创建一个名称为 MyVMMConnection 的新 Virtual Machine Manager 连接。

注意

我们使用哈希表来定义连接的属性。 这是因为不同类型的连接需要不同的属性集。 另一种类型的连接会使用另一组字段值。

有关哈希表的详细信息,请参阅 about_Hash_Tables

$webServer = 'https://MyWebServer'
$port = 9090
$connectionName = 'MyConnection'
$fieldValues = @{"Username"="MyUser";"Password"="password";"ComputerName"="MyComputer"}
New-SmaConnection -WebServiceEndpoint $webServer -port $port -Name $connectionName -ConnectionTypeName "VirtualMachineManager" -ConnectionFieldValues $fieldValues

在 runbook 中使用连接

使用 Get-AutomationConnection 活动可在 runbook 中使用连接。 此活动检索连接中不同字段的值,并将其作为哈希表返回,然后,该哈希表可与 Runbook 中的相应命令一起使用。

有关哈希表的详细信息,请参阅 about_Hash_Tables

下面的示例代码演示如何使用连接为在另一台计算机上运行命令的 InlineScript 块提供计算机名和凭据。

$con = Get-AutomationConnection -Name 'MyConnection'
$securepassword = ConvertTo-SecureString -AsPlainText -String $con.Password -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $con.Username, $securepassword
InlineScript {
   <Commands>
} -PSComputerName $con.ComputerName -PSCredential $cred

使用全局变量简化 runbook 开发

自动化变量是可用于所有 Runbook 的值。 可以从管理门户、Windows PowerShell 或 runbook 中创建、修改和检索这些变量。 自动化变量可用于以下方案:

  • 在多个 Runbook 之间共享某个值。

  • 在同一 Runbook 中的多个作业之间共享某个值。

  • 从管理门户或 Windows PowerShell 命令行管理 runbook 使用的值。

自动化变量将保留,以便在 runbook 失败时它们仍然继续可用。 这还允许由一个 Runbook 设置值,该值随后由另一个 Runbook 使用,或者在下次运行时由同一 Runbook 使用。

创建变量时,必须从以下列表指定其数据类型。 这样,管理门户就可以显示变量值的相应控件。 只能将正确类型的值分配给变量。

  • 字符串

  • Integer

  • 布尔

  • datetime

创建变量时,可以指定将其加密存储。 加密变量后,该变量将安全地存储在 SMA 数据库中,并且无法从 Get-SmaVariable cmdlet 检索其值。 可以检索加密值的唯一方法是从 Runbook 中的 Get-AutomationVariable 活动检索。 可以通过创建哈希表将定义的类型的多个值存储到单个变量中。

Windows PowerShell Cmdlet

可以使用下表中的 Windows PowerShell cmdlet 创建和管理变量。

Cmdlet 说明
Get-SmaVariable 检索现有变量的值。
Set-SmaVariable 创建新变量,或设置现有变量的值。

Runbook 活动

可以通过下表中的活动在 runbook 中访问变量。

活动 说明
Get-AutomationVariable 检索现有变量的值。
Set-AutomationVariable 设置现有变量的值。

注意

应避免在 Get-AutomationVariable 的 Name 参数中使用变量,因为这会使发现 runbook 和自动化变量之间的依赖关系变得复杂。

在管理门户中创建新的变量

  1. 选择“自动化”工作区。

  2. 在窗口顶部,选择“ 资产”。

  3. 在窗口底部,选择“ 添加设置”。

  4. 选择“ 添加变量”。

  5. “类型”下拉列表中,选择数据类型。

  6. 在“名称”框中输入变量 的名称

  7. 选择向右箭头。

  8. 输入变量的值,并指定是否对其进行加密。

  9. 选择检查标记以保存新变量。

使用 Windows PowerShell 创建新变量

Set-SmaVariable cmdlet 既可创建新变量,又可设置现有变量的值。 下面的示例命令演示如何创建字符串类型的变量。

$web = 'https://MySMAServer'
$port = 9090

Set-SMAVariable -WebServiceEndpoint $web -Port $port -Name 'MyVariable' -Value 'My String'

在 runbook 中使用变量

  • 下面的示例代码演示如何在 runbook 中设置和检索变量。 在此示例中,假定已创建名为 NumberOfIterations 和 NumberOfRunnings 的整数类型的变量,以及名为 SampleMessage 的字符串类型变量。

    $NumberOfIterations = Get-AutomationVariable -Name 'NumberOfIterations'
    $NumberOfRunnings = Get-AutomationVariable -Name 'NumberOfRunnings'
    $SampleMessage = Get-AutomationVariable -Name 'SampleMessage'
    Write-Output "Runbook has been run $NumberOfRunnings times."
    for ($i = 1; $i -le $NumberOfIterations; $i++) {
       Write-Output "$i`: $SampleMessage"
    }
    Set-AutomationVariable -Name NumberOfRunnings -Value (NumberOfRunnings += 1)
    

后续步骤