排查共享资源问题
本文讨论了在使用 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.Automation
或 AzureRM.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
后续步骤
如果本文未解决你的问题,请尝试通过以下渠道之一获取更多支持:
- 通过 Azure 论坛获取 Azure 专家的解答
- 如需更多帮助,可以提交 Azure 支持事件。 转到 Azure 支持站点。