使用全局资产简化 Service Management Automation Runbook 创作
全局资产可用于自动化环境中的所有 Runbook。 你可使用管理门户中的 Automation 工作区或利用 Windows PowerShell 中的适当 cmdlet 来创建和配置它们。 通过 Runbook,你可以使用 RunbookConstructs 模块中的活动检索和设置全局资产的值。 Windows PowerShell cmdlet 可用于 Service Management Automation 中的 Runbook,但建议使用活动,因为它们更高效,因为它们不必通过自动化 Web 服务工作。
获取或设置凭据
Automation 凭据是可与 Windows PowerShell 命令一起使用的用户名和密码或是上载到服务器的证书。 凭据的属性安全地存储在自动化数据库中,可以使用 Get-AutomationPSCredential 或 Get-AutomationCertificate 活动在 Runbook 中访问。
用于管理凭据的 PowerShell
可以使用下表中的 cmdlet 通过 Service Management Automation 中的 Windows PowerShell 创建和管理凭据。
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 的名称参数”中使用变量,因为这会使发现 Runbook 和自动化变量之间的依赖关系复杂化。
在管理门户中创建 PowerShell 凭据
选择“自动化” 工作区。
在窗口顶部,选择“ 资产”。
在窗口底部,选择“ 添加设置”。
选择“ 添加凭据”。
在“凭据类型”下拉列表中,选择“PowerShell 凭据”。
在 “名称 ”框中输入凭据的名称。
选择向右键。
输入每个属性的值。
选择复选标记以保存凭据。
在 中创建证书
管理门户
选择“自动化” 工作区。
在窗口顶部,选择“ 资产”。
在窗口底部,选择“ 添加设置”。
选择“ 添加凭据”。
在“凭据类型”下拉列表中,选择“证书”。
在 “名称 ”框中输入证书的名称。
选择向右键。
选择“ 浏览文件 ”并导航到.cer或 .pfx 文件。
如果选择了 .pfx 文件,则提供其密码。
选择复选标记以保存证书。
使用 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 中使用的连接。 |
在管理门户中创建连接
选择“自动化” 工作区。
在窗口顶部,选择“ 资产”。
在窗口底部,选择“ 添加设置”。
选择“添加连接”。
在“连接类型” 下拉列表中,选择连接类型。
在 “名称 ”框中输入连接的名称。
选择向右键。
为每个属性输入一个值。
选择复选标记以保存连接。
使用 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 使用,或者在下次运行时由同一 Runbook 使用。
创建变量时,必须从以下列表指定其数据类型。 这样,管理门户就可以显示变量值的相应控件。 只能将正确类型的值分配给变量。
字符串
Integer
布尔
日期/时间
创建变量时,可以指定将其加密存储。 加密变量后,它安全地存储在 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 的名称参数”中使用变量,因为这会使发现 Runbook 和自动化变量之间的依赖关系复杂化。
在管理门户中创建新变量
选择“自动化” 工作区。
在窗口顶部,选择“ 资产”。
在窗口底部,选择“ 添加设置”。
选择“ 添加变量”。
在“类型” 下拉列表中,选择数据类型。
在 “名称” 框中输入变量的名称。
选择向右键。
输入变量的值,并指定是否对其进行加密。
选择复选标记以保存新变量。
使用 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)