在 Azure 自动化中启动 Runbook

下表将帮助你确定如何在 Azure 自动化中以最适合你方案的方法启动 Runbook。本文包含有关使用 Azure 经典管理门户和 Windows PowerShell 启动 Runbook 的详细信息。有关其他方法的详细信息将在其他文档中提供,你可以通过以下链接来访问。

方法 特征
Azure 经典管理门户
  • 使用交互式用户界面的最简单方法。
  • 用于提供简单参数值的窗体。
  • 轻松跟踪作业状态。
  • 使用 Azure 登录对访问进行身份验证。
  • Windows PowerShell
  • 使用 Windows PowerShell cmdlet 从命令行调用。
  • 可以使用多个步骤包含在自动化解决方案中。
  • 使用证书或 OAuth 用户主体/服务主体对请求进行身份验证。
  • 提供简单和复杂的参数值。
  • 跟踪作业状态。
  • 支持 PowerShell cmdlet 所需的客户端。
  • Azure 自动化 API
  • 最有弹性的方法,但也最复杂。
  • 从任何可发出 HTTP 请求的自定义代码调用。
  • 使用证书或 OAuth 用户主体/服务主体对请求进行身份验证。
  • 提供简单和复杂的参数值。
  • 跟踪作业状态。
  • Webhook
  • 从单个 HTTP 请求启动 Runbook。
  • 使用 URL 中的安全令牌进行身份验证。
  • 客户端无法覆盖创建 Webhook 时指定的参数值。Runbook 可以定义填入了 HTTP 请求详细信息的单个参数。
  • 无法通过 Webhook URL 跟踪作业状态。
  • 计划
  • 按每小时、每天或每周计划自动启动 Runbook。
  • 通过 Azure 经典管理门户、PowerShell cmdlet 或 Azure API 来操作计划。
  • 提供要用于计划的参数值。
  • 从另一个 Runbook
  • 使用一个 Runbook 作为另一个 Runbook 中的活动。
  • 对多个 Runbook 使用的功能很有用。
  • 为子 Runbook 提供参数值,并使用父 Runbook 中的输出。
  • 下图演示了 Runbook 生命周期的详细分步过程。它包括在 Azure 自动化中启动 Runbook 的不同方式、本地计算机执行 Azure 自动化 Runbook 所需的组件以及不同组件之间的交互方式。

    Runbook 体系结构

    使用 Azure 经典管理门户启动 Runbook

    1. 在 Azure 经典管理门户中,选择“自动化”,然后单击自动化帐户的名称。
    2. 选择“Runbook”选项卡。
    3. 选择一个 Runbook,然后单击“启动”。
    4. 如果 Runbook 包含参数,则系统会提示你在文本框中提供每个参数的值。请参阅下面的 Runbook 参数,以获取有关参数的更多详细信息。
    5. 选择“启动 Runbook”消息旁边的“查看作业”,或选择 Runbook 的“作业”选项卡以查看 Runbook 作业的状态。

    使用 Windows PowerShell 启动 Runbook

    可以在 Windows PowerShell 中使用 Start-AzureAutomationRunbook 启动 Runbook。以下示例代码将启动名为 Test-Runbook 的 Runbook。

    Start-AzureAutomationRunbook –AutomationAccountName "MyAutomationAccount" –Name "Test-Runbook"
    

    Start-AzureAutomationRunbook 将返回一个作业对象,启动 Runbook 后,你可以使用该对象来跟踪 Runbook 的状态。然后可以将此作业对象与 Get-AzureAutomationJob 结合使用来确定作业的状态,并将它与 Get-AzureAutomationJobOutput 结合使用以获取作业的输出。以下示例代码将启动名为 Test-Runbook 的 Runbook,等待它完成,然后显示其输出。

    $runbookName = "Test-Runbook"
    $AutomationAcct = "MyAutomationAccount"
    
    $job = Start-AzureAutomationRunbook -AutomationAccountName $AutomationAcct -Name $runbookName
    
    $doLoop = $true
    While ($doLoop) {
       $job = Get-AzureAutomationJob -AutomationAccountName $AutomationAcct -Id $job.Id
       $status = $job.Status
       $doLoop = (($status -ne "Completed") -and ($status -ne "Failed") -and ($status -ne "Suspended") -and ($status -ne "Stopped"))
    }
    
    Get-AzureAutomationJobOutput -AutomationAccountName $AutomationAcct -Id $job.Id -Stream Output
    

    如果 Runbook 需要参数,则你必须以哈希表的形式提供参数,其中,哈希表的密钥与参数名称匹配,值为参数值。以下示例演示如何启动包含两个名称分别为 FirstName 和 LastName 的字符串参数、一个名为 RepeatCount 的整数和一个名为 Show 的布尔参数的 Runbook。有关参数的其他信息,请参阅下面的 Runbook 参数

    $params = @{"FirstName"="Joe";"LastName"="Smith";"RepeatCount"=2;"Show"=$true}
    Start-AzureAutomationRunbook -AutomationAccountName "MyAutomationAccount" -Name "Test-Runbook" -Parameters $params
    

    Runbook 参数

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

    Azure 自动化 Web 服务将为使用特定数据类型的参数提供特殊功能,如以下部分中所述。

    命名值

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

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

    Workflow Test-Parameters
    {
       param ( 
          [Parameter(Mandatory=$true)][object]$user
       )
    $userObject = $user | ConvertFrom-JSON
    if ($userObject.Show) {
        foreach ($i in 1..$userObject.RepeatCount) {
            $userObject.FirstName
            $userObject.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,则你可以提供 Azure 自动化凭据资产的名称。Runbook 将检索具有指定名称的凭据。

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

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

    假设存在名为 My Credential 的凭据资产,则可为 user 参数使用以下文本。

    My Credential
    

    假设凭据中的用户名为 jsmith,则会导致生成以下输出。

    jsmith
    

    后续步骤

    • 若要详细了解如何创建模块化 Runbook,以供其他 Runbook 用于特定或常用函数,请参阅子 Runbook