Azure 自动化 Runbook 类型

下表定义了 Azure 自动化流程自动化功能支持的几种 Runbook 类型。 若要了解有关流程自动化环境的信息,请参阅在 Azure 自动化中执行 Runbook

类型 说明
PowerShell 基于 Windows PowerShell 脚本的文本 Runbook。 当前支持的版本为:PowerShell 5.1(正式版)和 PowerShell 7.1(预览版)。
PowerShell 工作流 基于 Windows PowerShell 工作流脚本的文本 Runbook。
Python 基于 Python 脚本的文本 Runbook。 当前支持的版本:Python 2.7(正式版)和 Python 3.8(正式版)。
图形 基于 Windows PowerShell 的图形 Runbook,只能在 Azure 门户上的图形编辑器中创建和编辑。
图形 PowerShell 工作流 基于 Windows PowerShell 工作流的图形 Runbook,只能在 Azure 门户上的图形编辑器中创建和编辑。

注意

Azure 自动化将分别根据父产品 PowerShellPython 发布的时间线,遵循 PowerShell 和 Python 语言版本的支持生命周期。 建议将 Runbook 与受支持的语言版本配合使用。

在确定特定 Runbook 需要使用的类型时,请注意以下事项。

  • 无法将 Runbook 从图形转换为文本类型,反之亦然。
  • 将不同类型的 Runbook 用作子 Runbook 存在各种限制。 有关详细信息,请参阅 Azure 自动化中的子 Runbook

PowerShell Runbook

基于 Windows PowerShell 的 PowerShell Runbook。 可以在 Azure 门户中使用文本编辑器直接编辑 Runbook 的代码。 还可以使用任何脱机文本编辑器,以便导入 Runbook 到 Azure 自动化中。

PowerShell 版本取决于指定的运行时版本(即版本 7.1(预览版)或 5.1)。

同一 Azure 沙盒和混合 Runbook 辅助角色可以并行执行多个面向不同运行时版本的 PowerShell Runbook。

注意

在 runbook 执行时,如果选择“运行时版本”为“7.1 (预览版)”,则使用面向 7.1(预览版)运行时版本的 PowerShell 模块;如果选择“运行时版本”为“5.1”,则使用面向 5.1 运行时版本的 PowerShell 模块。

确保为模块选择正确的运行时版本。

例如,如果在运行时版本 7.1(预览版)中为 Sharepoint 自动化场景执行 runbook,则在运行时版本 7.1(预览版)中导入模块;如果在运行时版本 5.1 中为 Sharepoint 自动化场景执行 runbook,则在运行时版本 5.1 中导入模块。 在本例中,你会看到模块的两个条目,一个用于运行时版本 7.1(预览版),另一个用于运行时版本 5.1。

Runbook 类型。

注意

目前支持 PowerShell 5.1 和 PowerShell 7.1(预览版)。

优点

  • 通过 PowerShell 代码来实现所有复杂的逻辑,没有 PowerShell 工作流的各种其他复杂操作。
  • 与 PowerShell 工作流 Runbook 相比,它的启动速度更快,因为它们在运行前不需要经过编译。
  • 在 Azure 和适用于 Windows 和 Linux 的混合 Runbook 辅助角色上运行。

限制和已知问题

下面是 PowerShell Runbook 的当前限制和已知问题:

限制

  • Runbook 无法使用并行处理并行执行多个操作。
  • 出现错误时,Runbook 无法使用检查点恢复 Runbook。
  • 你可以使用 Start-AzAutomationRunbook cmdlet(用于创建新作业),仅将 PowerShell、PowerShell 工作流 Runbook 和图形 Runbook 以子 Runbook 的形式包括在内。
  • Runbook 无法使用 PowerShell #Requires 语句,并且不支持在 Azure 沙盒或混合 Runbook 辅助角色中使用,否则可能导致作业失败。
  • Azure Runbook 不支持带有 -credentialStart-Job
  • Azure 不支持所有 PowerShell 输入参数。 了解详细信息

已知问题

  • 由于服务后端基础结构的更改,依赖于内部文件路径 (如 C:\modules) 的 Runbook 可能会失败。 更改 Runbook 代码以确保内部文件路径上没有依赖项,并使用 Get-ChildItem 来获取所需的模块信息。

    示例脚本

    
    # Get information about module "Microsoft.Graph.Authentication"
    $ModuleName = "Microsoft.Graph.Authentication"
    
    $NewPath = "C:\usr\src\PSModules\$ModuleName"
    $OldPath = "C:\Modules\User\$ModuleName"
    
    if (Test-Path -Path $NewPath -PathType Container) {
        Get-ChildItem -Path $NewPath
    } elseif (Test-Path -Path $OldPath -PathType Container) {
        Get-ChildItem -Path $OldPath
    } else {
        Write-Output "Module $ModuleName not present."
    }
    # Getting the path to the Temp folder, if needed.
    $tmp = $env:TEMP
    
    
  • Get-AzStorageAccount cmdlet 可能会失败并出现错误:在模块 Az.Storage 中找到了 Get-AzStorageAccount 命令,但无法加载该模块

  • PowerShell Runbook 无法检索未加密且值为 Null 的变量资产

  • PowerShell Runbook 无法检索名称中包含 *~* 的变量资产。

  • 在 PowerShell Runbook 中,处于循环状态的 Get-Process 操作在经历大约 80 次迭代后可能会崩溃。

  • 如果 PowerShell Runbook 尝试一次性将大量数据写入输出流中,则可能会发生故障。 通常情况下,通过使 Runbook 仅输出处理大型对象所需的信息可以避免出现这种问题。 例如,可以让 cmdlet 仅输出所需的参数,如在 Get-Process | Select ProcessName, CPU 中那样,而不是不受限地使用 Get-Process

  • 使用 ExchangeOnlineManagement 模块版本 3.0.0 或更高版本时,可能会遇到错误。 若要解决此问题,请确保还显式上传 PowerShellGetPackageManagement 模块。

  • 使用 Az.Automation 模块中的 New-AzAutomationVariable cmdlet 上传对象类型的变量时,该操作将不会按预期运行。

    解决方法:使用 ConvertTo-Json cmdlet 将该对象转换为 JSON 字符串,然后以 JSON 字符串作为其值上传变量。 此解决方法可确保将 Azure 自动化环境中变量作为 JSON 字符串正确处理。

    示例 - 创建已存储有关 Azure VM 的信息的 PowerShell 对象

      # Retrieve Azure virtual machines with status information for the 'chinanorth' region 
      $AzVM = Get-AzVM -Status | Where-Object {$_.Location -eq "chinanorth"} 
    
      $VMstopatch = @($AzVM).Id 
      # Create an Azure Automation variable (This cmdlet will not fail, but the variable may not work as intended when used in the runbook.) 
      New-AzAutomationVariable -ResourceGroupName "mrg" -AutomationAccountName "mAutomationAccount2" -Name "complex1" -Encrypted $false -Value $VMstopatch 
    
      # Convert the object to a JSON string 
      $jsonString = $VMstopatch | ConvertTo-Json 
    
      # Create an Azure Automation variable with a JSON string value (works effectively within the automation runbook) 
      New-AzAutomationVariable -ResourceGroupName "mrg" -AutomationAccountName "mAutomationAccount2" -Name "complex1" -Encrypted $false -Value $jsonString 
    

PowerShell 工作流 Runbook

PowerShell 工作流 Runbook 是基于 Windows PowerShell 工作流的文本 Runbook。 可以在 Azure 门户中使用文本编辑器直接编辑 Runbook 的代码。 还可以使用任何脱机文本编辑器,以便导入 Runbook 到 Azure 自动化中。

注意

PowerShell 7.1(预览版)不支持工作流 Runbook。

优点

  • 通过 PowerShell 工作流代码实现所有复杂的逻辑。
  • 出现错误时,使用检查点恢复操作。
  • 使用并行处理并行执行多个操作。
  • 能够以子 Runbook 的形式包括其他图形 Runbook 和 PowerShell 工作流 Runbook,以创建高级工作流。

限制

  • PowerShell 7+ 版本不支持 PowerShell 工作流。 因此,无法升级过时的 Runbook。
  • 与较新的 PowerShell 7+ 版本相比,并行执行的处理效率低下。
  • PowerShell 工作流在内部使用多个进程来工作。 因此,一个进程中可用的模块可能在另一个进程中不可用,并导致找不到命令等异常
  • Runbook 还必须处理与 PowerShell 工作流相关的其他复杂问题,例如反序列化的对象
  • 与 PowerShell Runbook 相比,Runbook 的启动时间更长,因为它们在运行前需要进行编译。
  • 可以使用 Start-AzAutomationRunbook cmdlet 仅将 PowerShell Runbook 作为子 Runbook 包括在内。
  • Runbook 无法在 Linux 混合 Runbook 辅助角色上运行。

Python Runbook

Python Runbook 在 Python 2.7(正式版)和 Python 3.8(正式版)下编译。 可以在 Azure 门户中使用文本编辑器直接编辑 Runbook 的代码。 还可以使用任何脱机文本编辑器,以及将 Runbook 导入到 Azure 自动化中。

优点

注意

导入 Python 包可能需要几分钟时间。

  • 使用可靠的 Python 库。
  • 可以在 Azure 中或混合 Runbook 辅助角色上运行。
  • 对于 Python 2.7,在已安装 Python 2.7 的情况下,支持 Windows 混合 Runbook 辅助角色。
  • 对于 Python 3.8 云作业,支持 Python 3.8 版本。 如果代码与不同的版本兼容,则任何 3.x 版本的脚本和包都可能起作用。
  • 对于 Windows 计算机上的 Python 3.8 混合作业,你可以选择安装要使用的任何 3.x 版本。
  • 对于 Linux 计算机上的 Python 3.8 混合作业,我们根据安装在计算机上 Python 3 版本来运行 DSC OMSConfig 和 Linux 混合辅助角色。 如果 Python 3 版本间的方法签名或协定没有发生重大更改,则不同的版本应该也会工作。

限制

下面是 Python Runbook 的限制

  • 你必须熟悉 Python 脚本。
  • 不支持源代码管理集成。
  • 对于 Python 3.8 模块,请使用面向 cp38-amd64 的 wheel 文件。
  • 若要使用第三方库,必须将包导入自动化帐户。
  • 在 PowerShell/PowerShell 工作流中使用 Start-AutomationRunbook cmdlet 启动 Python 3.8 runbook 的操作不起作用。 你可以使用 Az.Automation 模块中的 Start-AzAutomationRunbook 或 AzureRm.Automation 模块中的 Start-AzureRmAutomationRunbook 来解决此限制
  • Azure 自动化不支持 sys.stderr
  • Python automationassets 包在 pypi.org 上不可用,因此无法导入到 Windows 计算机上。

多个 Python 版本

它适用于 Windows 混合辅助角色。 对于 Windows Runbook 辅助角色,运行 Python 2 Runbook 时,它会首先查找环境变量 PYTHON_2_PATH,并验证它是否指向有效的可执行文件。 例如,如果安装文件夹为 C:\Python2,它将检查 C:\Python2\python.exe 是否是有效的路径。 如果未找到,它会查找 PATH 环境变量以执行类似的检查。

对于 Python 3,它首先查找 PYTHON_3_PATH 环境变量,然后返回到 PATH 环境变量。

如果只使用一个版本的 Python,可以将安装路径添加到 PATH 变量。 如果要在 Runbook 辅助角色上同时使用这两个版本,请为这些版本将 PYTHON_2_PATHPYTHON_3_PATH 设置为模块的位置。

已知问题

对于云作业,Python 3.8 作业有时会失败并显示异常消息 invalid interpreter executable path。 如果作业延迟、启动时间超过 10 分钟或使用 Start-AutomationRunbook 来启动 Python 3.8 Runbook,则可能会看到此异常。 如果作业延迟,请重新启动 Runbook。

图形 Runbook

可以在 Azure 门户中使用图形编辑器创建和编辑图形 Runbook 与图形 PowerShell 工作流 Runbook。 但是,不能使用其他工具来创建或编辑这种类型的 Runbook。 图形 Runbook 的主要功能:

  • 导出到自动化帐户中的文件,然后导入到另一个自动化帐户中。
  • 生成 PowerShell 代码。
  • 在导入过程中转换为图形 PowerShell 工作流 runbook,或者由该工作流 runbook 转换而来。

优点

  • 使用直观的插入-链接-配置创作模型。
  • 注重数据在执行流程期间的流动方式。
  • 直观展示管理流程。
  • 可以以子 Runbook 形式包括其他 Runbook,以便创建高级工作流。
  • 鼓励模块化编程。

限制

  • 无法在 Azure 门户之外进行创建或编辑。
  • 可能需要包含 PowerShell 代码的代码活动,才能执行复杂逻辑。
  • 无法转换为某种文本格式,也无法将文本 Runbook 转换为图形格式。
  • 不能查看或直接编辑图形工作流创建的 PowerShell 代码。 可以查看在任何代码活动中创建的代码。
  • 无法在 Linux 混合 Runbook 辅助角色上运行 Runbook。 请参阅使用混合 Runbook 辅助角色使数据中心或云端的资源实现自动化
  • 不能对图形 runbook 进行数字签名。

后续步骤