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 自动化将分别根据父产品 PowerShell 和 Python 发布的时间线,遵循 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。
注意
目前支持 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 不支持带有
-credential
的Start-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 或更高版本时,可能会遇到错误。 若要解决此问题,请确保还显式上传 PowerShellGet 和 PackageManagement 模块。
使用 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_PATH
和 PYTHON_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 进行数字签名。
后续步骤
- 要了解 PowerShell Runbook,请参阅教程:创建 PowerShell Runbook。
- 要了解 PowerShell 工作流 Runbook,请参阅教程:创建 PowerShell 工作流 Runbook。
- 要了解图形 Runbook,请参阅教程:创建图形 Runbook。
- 要了解 Python Runbook,请参阅教程:创建 Python Runbook。