如何启动 Runbook

 

适用对象:Windows Azure Pack for Windows Server

可以使用以下三种方法的其中一种方法在 Service Management Automation 中启动 Runbook。

下面介绍了前两种方法。从另一个 Runbook 启动 Runbook 中记录了如何从另一个 Runbook 调用另一个 Runbook。

从 Microsoft Azure 包管理门户中启动 Runbook

  1. 在管理门户中,选择左侧窗格中的**“自动化”**。

  2. 选择“Runbook”选项卡。

  3. 选择一个 Runbook,然后单击**“启动”**。

  4. 如果 Runbook 具有参数,则会出现文本框提示,要求为每个参数提供值。布尔参数和 datetime 参数具有专门的选择器,而不是标准文本框。请参阅下面的 Runbook 参数 以进一步获得参数的详细信息。

  5. 若要查看作业的状态,请选择**“启动 Runbook”消息旁边的“查看作业”或选择 Runbook 的“作业”**选项卡。

使用 Windows PowerShell 启动 Runbook

可以使用 Start-SmaRunbook 借助 Windows PowerShell 来启动 Runbook。下面的示例代码启动名为 Test-Runbook 的 Runbook。

$webServer = 'https://MyServer'
$port = 9090
$runbookName = "Test-Runbook"
Start-SmaRunbook –WebServiceEndpoint $webServer –Port $port –Name $runbookName

Start-SmaRunbook 返回可用于在启动 Runbook 后跟踪其状态的作业对象。然后可以使用此作业对象和 Get-SmaJob 来确定作业的状态,并使用 Get-SmaJobOutput 来获取其输出。下面的示例代码启动名为 Test-Runbook 的 Runbook,等待其完成,然后显示其输出。

$webServer = 'https://MyServer'
$port = 9090
$runbookName = "Test-Runbook"

$job = Start-SmaRunbook –WebServiceEndpoint $webServer –Port $port –Name $runbookName

$doLoop = $true
While ($doLoop) {
   $job = Get-SmaJob –WebServiceEndpoint $webServer –Port $port -Id $job.Id
   $status = $job.Status
   $doLoop = (($status -ne "Completed") -and ($status -ne "Failed") -and ($status -ne "Suspended") -and ($status -ne "Stopped") 
}

Get-SmaJobOutput –WebServiceEndpoint $webServer –Port $port -Id $job.Id –Stream Output

如果 Runbook 需要参数,则必须将参数作为哈希表进行提供,其中哈希表的键会匹配参数名,其值即为参数值。下面的示例演示如何使用名为 FirstName 和 LastName 的两个字符串参数、名为 RepeatCount 的整数和名为 Show 的布尔参数启动 Runbook。有关参数的其他信息,请参阅下面的 Runbook 参数。

$webServer = 'https://MyServer'
$port = 9090
$runbookName = "Test-Runbook"

$params = @{"FirstName"="Joe";"LastName"="Smith";"RepeatCount"=2;"Show"=$true}
Start-SmaRunbook –WebServiceEndpoint $webServer –Port $port –Name $runbookName –Parameters $params

Runbook 参数

参数是 Runbook 启动时所需的值。例如,创建新虚拟机的 Runbook 很可能拥有用于指定计算机名称的参数。如果参数是必需的,则必须在启动 Runbook 时为该参数提供一个值。如果参数不是必需的,则可以提供一个值,但并不是必须的。

当使用管理门户或 Windows PowerShell 启动 Runbook 时,系统将通过 Automation Web 服务发送指令。此服务不支持复杂数据类型的参数。如果需要为复杂参数提供值,则必须从另一个 Runbook 中内联调用该参数,如 从另一个 Runbook 启动 Runbook 中所述。

Automation Web 服务使用以下各节所述的特定数据类型为参数提供特殊的功能。

已命名的值

如果参数是数据类型 [object],则可以使用下面的 JSON 格式向其发送已命名的值的列表:{"Name1":Value1, "Name2":Value2, "Name3":Value3}。这些值必须是简单类型。Runbook 会将参数接收为 PSCustomObject,且具有对应于每个已命名的值的属性。

请考虑以下接受名为 user 的参数的测试 Runbook。

Workflow Test-Parameters
{
   param ( 
      [Parameter(Mandatory=$true)][object]$user
   )
    if ($user.Show) {
        foreach ($i in 1..$user.RepeatCount) {
            $user.FirstName
            $user.LastName
        }
    } 
}

可对 user 参数使用以下文本。

{"FirstName":"Joe","LastName":"Smith","RepeatCount":2,"Show":true}

这将产生以下输出。

Joe
Smith
Joe
Smith

阵列

如果参数是一个数组(如 [array] 或 [string[]]),则可以使用以下 JSON 格式向其发送值列表:[Value1,Value2,Value3]。这些值必须是简单类型。

请考虑以下接受名为 user 的参数的测试 Runbook。

Workflow Test-Parameters
{
   param ( 
      [Parameter(Mandatory=$true)][array]$user
   )
    if ($user[3]) {
        foreach ($i in 1..$user[2]) {
            $ user[0]
            $ user[1]
        }
    } 
}

可对 user 参数使用以下文本。

["Joe","Smith",2,true]

这将产生以下输出。

Joe
Smith
Joe
Smith

凭据

如果该参数是数据类型 [PSCredential],则可以提供 Service Management Automation 凭据资产的名称。Runbook 将使用指定的名称检索凭据资产

请考虑以下接受名为 credential 的参数的测试 Runbook。

Workflow Test-Parameters
{
   param ( 
      [Parameter(Mandatory=$true)][PSCredential]$credential
   )
   $credential.UserName
}

假定存在名为 "MyCredential" 的凭据资产,则下面的文本可用于 user 参数。

MyCredential

假定凭据的用户名是 jsmith,则会得到以下输出。

jsmith