Azure环境下Hybrid Worker扩展安装失败及状态异常求助
Azure Hybrid Worker扩展安装故障排查
问题概述
我有一套PowerShell脚本,用于创建VM并安装Hybrid Worker及其扩展,但安装扩展时偶尔报错。即使脚本运行成功,也会出现**VM上显示扩展已安装,但自动化账户中Hybrid Worker显示“扩展未配置”**的异常情况。
脚本代码
$maxRetryCount = 3 $retryCount = 0 $retryIntervalSeconds = 120 do { $testvm = Get-AzVM -ResourceGroupName $resourcegroupname -Status | Where-Object { $_.Name -like "winvm1" } if ($testvm.PowerState -ne "VM running") { $retryCount ++ Write-Output "INFORMATION:: Waiting for Man VM to be operational. Retries : $($retryCount) of $($maxRetryCount)" Start-Sleep -Seconds $retryIntervalSeconds } else { Write-Output "INFORMATION:: winvm1 is in running state." break } } while ($retryCount -lt $maxRetryCount) if ($testvm.PowerState -ne "VM running") { Write-Error "VM not running." } $HW1 = Get-AzAutomationHybridRunbookWorkerGroup -ResourceGroupName $resourcegroupname -AutomationAccountName $aaname -Name "hwrwinvm1" $getHW1 = Get-AzAutomationHybridRunbookWorker -ResourceGroupName $resourcegroupname -AutomationAccountName $aaname -HybridRunbookWorkerGroupName $HW1.Name | Where-Object { $_.VmResourceId -like $testvm.id} if(!$getHW1){ [guid]$worker1 = [guid]::NewGuid() Write-Output "ATTEMPTING:: Hybrid Worker Creation for $($testvm.Name)" try { $hybridWorkerConfiguration = @{ ResourceGroupName = $resourcegroupname AutomationAccountName = $aaname VmResourceId = $testvm.Id HybridRunbookWorkerGroupName = $HW1.Name Name = $worker1 } # Attempt to create a new Hybrid Worker $null = New-AzAutomationHybridRunbookWorker @hybridWorkerConfiguration } catch { Write-Error "An error occurred: $($_.Exception.Message)" } } if(!$getHW1.Ip){ #create AutomationURI $token = Get-AzBearerToken $automationurl1 = "https://management.usgovcloudapi.net/subscriptions/${subscriptionId}/resourceGroups/${resourcegroupname}/providers/Microsoft.Automation/automationAccounts/${aaName}?api-version=2021-06-22" $settingsMan = @{ AutomationAccountURL = (Invoke-RestMethod -Uri $automationurl1 -Headers @{ "Authorization" = $token } -Method Get).properties.AutomationHybridServiceUrl } try { $installextension = @{ ResourceGroupName = $testvm.ResourceGroupName Location = $testvm.Location VMName = $testvm.Name Name = "HybridWorkerExtension" Publisher = "Microsoft.Azure.Automation.HybridWorker" ExtensionType = "HybridWorkerForWindows" TypeHandlerVersion = "1.1" Settings = $settingsMan EnableAutomaticUpgrade = $true } # Attempt to set the VM extension Set-AzVMExtension @installextension } catch { Write-Error "An error occurred: $($_.Exception.Message)" } }else{ Write-Warning "Extension installed" }
错误信息
. '/home/vsts/work/1/s/SCRIPTS/PIPELINE/failover.ps1' -subscriptionId … | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | An error occurred while setting the VM extension: Long running operation | failed with status 'Failed'. Additional Info:'VM has reported a failure | when processing extension 'HybridWorkerExtension' (publisher | 'Microsoft.Azure.Automation.HybridWorker' and type | 'HybridWorkerForWindows'). Error message: "[Internal Error] The Hybrid | Worker Extension failed to execute: | System.Net.Http.HttpRequestException: An error occurred while sending | the request. ---> System.Net.WebException: The remote name could not be | resolved: | 'XXXX.jrds.usge.azure-automation.us' | at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult | asyncResult, TransportContext& context) at | System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult | ar) --- End of inner exception stack trace --- at | System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at
异常现象截图

故障分析与解决建议
1. DNS解析错误(核心报错原因)
报错提示远程名称无法解析: 'XXXX.jrds.usge.azure-automation.us',说明VM无法解析Azure政府云的自动化服务域名:
- 检查VM的DNS服务器设置:确保使用Azure默认DNS(或能解析政府云域名的DNS服务器),避免使用无法访问Azure政府云的自定义DNS。
- 验证VM网络连通性:在VM内执行
nslookup XXXX.jrds.usge.azure-automation.us,确认能正常解析出IP。若无法解析,需调整DNS配置或检查网络防火墙/NSG是否拦截了DNS请求。
2. 脚本逻辑缺陷(导致“扩展已安装但未配置”)
脚本中判断条件!$getHW1.Ip存在逻辑漏洞:
- 创建Hybrid Worker后,
$getHW1变量不会自动刷新,导致后续判断仍使用旧值,跳过扩展安装逻辑。 - 修复方案:在创建Hybrid Worker后,重新获取
$getHW1的最新状态:
if(!$getHW1){ [guid]$worker1 = [guid]::NewGuid() Write-Output "ATTEMPTING:: Hybrid Worker Creation for $($testvm.Name)" try { $hybridWorkerConfiguration = @{ ResourceGroupName = $resourcegroupname AutomationAccountName = $aaname VmResourceId = $testvm.Id HybridRunbookWorkerGroupName = $HW1.Name Name = $worker1 } # Attempt to create a new Hybrid Worker $null = New-AzAutomationHybridRunbookWorker @hybridWorkerConfiguration # 新增:重新获取Hybrid Worker的最新状态 $getHW1 = Get-AzAutomationHybridRunbookWorker -ResourceGroupName $resourcegroupname -AutomationAccountName $aaname -HybridRunbookWorkerGroupName $HW1.Name | Where-Object { $_.VmResourceId -like $testvm.id} } catch { Write-Error "An error occurred: $($_.Exception.Message)" } }
3. 扩展安装时机问题
VM刚启动完成可能仍处于初始化状态,直接安装扩展会导致失败:
- 延长VM启动后的等待时间,或增加扩展安装的重试逻辑,确保VM完全就绪后再执行扩展安装。
4. 扩展版本兼容性
脚本中指定TypeHandlerVersion = "1.1",建议使用最新兼容版本,或移除该参数让系统自动选择合适版本,避免版本不兼容导致的异常。
内容的提问来源于stack exchange,提问作者Ayanda ezekiel
相关产品推荐
相关产品推荐

