排查共享资源问题

本文讨论了在使用 Azure 自动化中的共享资源时可能会出现的问题。

模块

场景:在导入期间模块处于停滞状态

问题

导入或更新 Azure 自动化模块时,模块停滞在“正在导入”状态。

原因

由于导入 PowerShell 模块是一个复杂的多步骤过程,模块可能不会正确导入,并且停滞在某种暂时性状态。 若要详细了解导入过程,请参阅导入 PowerShell 模块

解决方法

若要解决此问题,必须使用 Remove-AzAutomationModule cmdlet 删除处于停滞状态的模块。 然后,可以重试导入模块。

Remove-AzAutomationModule -Name ModuleName -ResourceGroupName ExampleResourceGroup -AutomationAccountName ExampleAutomationAccount -Force

场景:尝试更新后,AzureRM 模块在导入期间停滞

问题

尝试更新 AzureRM 模块后,帐户中一直显示包含以下消息的横幅:

Azure modules are being updated

原因

更新自动化帐户中的 AzureRM 模块时存在一个已知问题。 具体而言,如果模块所在的资源组具有以 0 开头的数字名称,则会出现此问题。

解决方法

若要更新自动化帐户中的 AzureRM 模块,该帐户必须位于采用字母数字名称的资源组中。 采用以 0 开头的数字名称的资源组目前无法更新 AzureRM 模块。

场景:模块无法导入,或者 cmdlet 在导入后无法执行

问题

模块无法导入,或者虽然导入成功,但无法提取 cmdlet。

原因

模块无法成功导入到 Azure 自动化中的一些常见原因是:

  • 结构与自动化所需的结构不匹配。
  • 该模块依赖于其他模块,而后者尚未部署到自动化帐户。
  • 该模块的文件夹中缺少依赖项。
  • 使用了 New-AzAutomationModule cmdlet 来上传该模块,但你未提供完整的存储路径,或者未使用可公开访问的 URL 来加载该模块。

解决方法

使用以下任一解决方法来解决此问题:

  • 确保该模块遵循以下格式:模块名称.Zip -> 模块名称或版本号 ->(模块名称.psm1、模块名称.psd1)。
  • 打开 .psd1 文件,查看该模块是否有任何依赖项。 如果有,则将这些模块上传到自动化帐户。
  • 确保所引用的任何 .dll 文件都存在于模块文件夹中。

场景:Update-AzureModule.ps1 在更新模块时暂停

问题

使用 Update-AzureModule.ps1 Runbook 更新 Azure 模块时,模块更新过程暂停。

原因

对于此 Runbook,用于确定可同时更新的模块数的默认设置为 10。 如果同时更新太多模块,则更新过程容易出错。

解决方法

在同一个自动化帐户中需要使用所有 AzureRM 或 Az 模块的情况并不常见。 你应当只导入所需的特定模块。

注意

避免导入整个 Az.AutomationAzureRM.Automation 模块,否则会导入包含的所有模块。

如果更新过程暂停,请向 Update-AzureModules.ps1 脚本添加 SimultaneousModuleImportJobCount 参数,并提供小于默认值 10 的值。 如果实现此逻辑,请尝试从值 3 或 5 开始。 SimultaneousModuleImportJobCount 是用于更新 Azure 模块的 Update-AutomationAzureModulesForAccount 系统 Runbook 的一个参数。 如果进行此调整,更新过程的运行时间会变长,但会提高成功完成的可能性。 以下示例显示了该参数及其在 runbook 中的放置位置:

$Body = @"
   {
      "properties":{
      "runbook":{
            "name":"Update-AutomationAzureModulesForAccount"
      },
      "parameters":{
            ...
            "SimultaneousModuleImportJobCount":"3",
            ... 
      }
      }
   }
"@

运行方式帐户

注意

Azure 自动化运行方式帐户(包括经典运行方式帐户)已于 2023 年 9 月 30 日停用,并已由托管标识取代。你将无法再通过 Azure 门户创建或续订运行方式帐户。 有关详细信息,请参阅从现有运行方式帐户迁移到托管标识

场景:执行 Runbook 时收到错误“在 DLL 'iplpapi.dll' 中找不到名为 'GetPerAdapterInfo' 的入口点”

问题

执行 Runbook 时收到以下异常:

Unable to find an entry point named 'GetPerAdapterInfo' in DLL 'iplpapi.dll'

原因

此错误很可能是由于错误配置了运行方式帐户而造成的。

解决方法

确保正确配置运行方式帐户。 然后,验证在 Runbook 中是否提供了用于在 Azure 中进行身份验证的正确代码。 以下示例展示了 Runbook 中使用运行方式帐户向 Azure 进行身份验证的代码片段。

$connection = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $connection.TenantID `
-ApplicationID $connection.ApplicationID -CertificateThumbprint $connection.CertificateThumbprint -Environment AzureChinaCloud

后续步骤

如果本文未解决你的问题,请尝试通过以下渠道之一获取更多支持: