变量

 

适用对象:Windows Azure Pack for Windows Server, System Center 2012 R2 Orchestrator

自动化 变量是可供所有 runbook 使用的值。 可以从管理门户、Windows PowerShell 或 Runbook 中创建、修改和检索它们。自动化 变量对于以下情况非常有用:

  • 在多个 runbook 之间共享值。

  • 在相同 runbook 中的多个作业之间共享值。

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

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

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

  • 字符串

  • 整数

  • 布尔值

  • 日期/时间

创建变量时,可以指定它以加密方式存储。 对变量进行加密时,它会安全地存储在 SMA 数据库中,无法通过 Get-SmaVariable cmdlet 检索其值。 可以用于检索加密值的唯一方法是在 runbook 中通过 Get-AutomationVariable 活动。 可以通过创建哈希表将具有已定义类型的多个值存储到单个变量中。

Windows PowerShell Cmdlet

下表中的 cmdlet 用于通过 Service Management Automation 中的 Windows PowerShell 创建和管理变量。

Cmdlet

描述

Get-SmaVariable

检索现有变量的值。

Set-SmaVariable

创建新变量,或设置现有变量的值。

Runbook 活动

下表中的活动用于在 runbook 中访问变量。

活动

描述

Get-AutomationVariable

检索现有变量的值。

Set-AutomationVariable

设置现有变量的值。

System_CAPS_note注意

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

创建新自动化变量

使用管理门户创建新变量

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

  2. 在窗口顶部,单击“资产”。

  3. 在窗口底部,单击“添加设置”。

  4. 单击“添加变量”。

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

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

  7. 单击右箭头。

  8. 为变量输入值,然后指定是否要对它进行加密。

  9. 单击复选标记以保存新变量。

使用 Service Management Automation 中的 Windows PowerShell 创建新变量

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

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

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

在 runbook 中使用变量

使用 Get-AutomationVariable 活动可在 runbook 中使用变量。

在 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 (NumberOfRunngs += 1)