排查在 Azure 自动化中使用 PowerShell 时的 Runbook 执行问题

本文提供有关在 Azure 自动化中使用 PowerShell 脚本或 cmdlet 时诊断和解决 Runbook 执行问题的指南。

注释

Azure 自动化允许恢复过去 29 天内删除的 runbook。 可以通过在自动化帐户中将 PowerShell 脚本作为作业运行来还原已删除的 Runbook。 有关详细信息,请参阅还原已删除的 runbook

PowerShell Runbook 的限制和已知问题

PowerShell Runbook 基于 Windows PowerShell 构建。 可以在 Azure 门户中使用文本编辑器直接编辑其代码。 您也可以使用脱机文本编辑器,并且随后将运行手册导入 Azure 自动化。 PowerShell 版本由指定的 运行时版本 确定。

局限性:

  • 对于 PowerShell 7 运行时版本,不会为导入的模块提取模块活动。
  • PowerShell 7 运行时版本不支持 PSCredential runbook 参数类型。
  • PowerShell 7.x 不支持工作流运行手册。 有关详细信息,请参阅 PowerShell 工作流
  • PowerShell 7.x 目前不支持签名的运行手册。
  • 源代码管理集成不支持 PowerShell 7.2。 源代码管理中的 PowerShell 7.2 Runbook 在自动化帐户中创建为运行时 5.1。
  • 目前,PowerShell 7.2 运行时版本仅支持云作业。
  • 不支持在同一自动化帐户中同时使用 Az 模块和 AzureRM 模块。 有关详细信息,请参阅 更新自动化中的 Azure PowerShell 模块

已知问题:

  • PowerShell 7 运行时不支持定义日志记录首选项的 runbook 属性。

    若要解决此问题,请在 Runbook 开始时显式设置首选项,如下所示:

    $VerbosePreference = "Continue"
    $ProgressPreference = "Continue"
    
  • 使用 ExchangeOnlineManagement 模块 3.0.0 或更高版本时,可能会遇到错误。

    若要解决此问题,请确保显式上传 PowerShellGetPackageManagement 模块。

故障排除前

在进一步进行故障排除之前,请按照以下步骤确定并解决常见错误:

  1. 验证 PowerShell 脚本是否在 Azure 自动化之外工作。
  2. 验证所需的模块是否已导入 Azure 自动化帐户。

问题 1:由于反序列化后的对象,Runbook 执行失败

症状:

运行 Runbook 时,可能会显示以下错误消息:

无法绑定参数<ParameterName>。

无法将类型为<ParameterType>的反序列化<ParameterType>值转换为<ParameterType>类型。

原因:

PowerShell 工作流 Runbook 发生此错误,因为 PowerShell 工作流以反序列化格式存储复杂对象,以在工作流暂停时保留 Runbook 状态。

解决方法:

若要解决此问题,请使用以下方法之一:

  • 如果将复杂对象从一个 PowerShell cmdlet 传递到另一个 cmdlet,请在 InlineScript 活动中包装这些 cmdlet。
  • 传递复杂对象中你所需要的名称或值,不必传递整个对象。
  • 使用 PowerShell 运行簿,而不使用 PowerShell 工作流运行簿。

问题 2:PowerShell 作业失败并出现“无法调用方法”错误

症状:

在 Azure 沙盒中运行的 Runbook 中启动 PowerShell 作业时,会收到以下错误消息:

引发异常 - 无法调用方法。 仅在此语言模式下支持对核心类型的方法调用。

原因:

此错误可能是因为 Runbook 无法在 完整语言模式下运行。

解决方法:

若要解决此错误,请使用以下方法之一:

参考文献

联系我们以获得帮助

如果您有任何疑问或需要帮助,可以创建支持请求,或咨询Azure社区支持。 您还可以向Azure反馈社区提交产品反馈。