使用PowerShell创建Azure Hybrid Worker报错,求解决及Graph替代方案
问题解决:Azure VM添加为Hybrid Worker失败(GUID格式错误)
PowerShell代码修正
报错原因是New-AzAutomationHybridRunbookWorker的Name参数要求传入GUID格式的Hybrid Worker ID,但你传入了VM名称。当通过VmResourceId指定Azure VM时,无需手动设置Name参数,系统会自动关联VM并生成合法标识。
修正后的代码:
$rgDRname = 'rgjt4061rbdr' $rgname = 'rgjt4061rb' $aaname = 'aajt4061rb' $hybridWorkerGroupName = 'hwrvmjt4061rbDNS1' # 定位目标VM并验证存在性 $vmDNS1resource = Get-AzVM -ResourceGroupName $rgDRname | Where-Object { $_.Name -like "vm*DNS1" } if (-not $vmDNS1resource) { Write-Error "未找到符合命名规则的灾备VM" exit 1 } $vmDNS1resourceid = $vmDNS1resource.Id # 构造Hybrid Worker配置(移除错误的Name参数) $hybridWorkerConfiguration = @{ ResourceGroupName = $rgname AutomationAccountName = $aaname VmResourceId = $vmDNS1resourceid HybridRunbookWorkerGroupName = $hybridWorkerGroupName } # 执行添加操作 New-AzAutomationHybridRunbookWorker @hybridWorkerConfiguration
前置条件
- 当前执行账号需具备Automation Contributor和Virtual Machine Contributor权限
- 目标VM需处于运行状态,且网络可连接到Azure Automation服务
Microsoft Graph实现方案
通过Microsoft Graph Beta API可以完成相同操作,以下是PowerShell调用示例:
步骤1:连接Graph并获取权限
# 连接到Microsoft Graph,需申请AutomationHybridRunbookWorkers.ReadWrite.All权限 Connect-MgGraph -Scopes "AutomationHybridRunbookWorkers.ReadWrite.All","Directory.Read.All" # 若未安装Beta模块,先执行:Install-Module Microsoft.Graph.Beta.Automation
步骤2:执行添加操作
$rgDRname = 'rgjt4061rbdr' $rgname = 'rgjt4061rb' $aaname = 'aajt4061rb' $hybridWorkerGroupName = 'hwrvmjt4061rbDNS1' # 获取当前订阅ID $subscriptionId = (Get-AzContext).Subscription.Id # 构造Automation Account的Graph资源ID $automationAccountId = "/subscriptions/$subscriptionId/resourceGroups/$rgname/providers/Microsoft.Automation/automationAccounts/$aaname" # 查找目标Hybrid Worker Group $hybridWorkerGroup = Get-MgBetaAutomationAutomationAccountHybridRunbookWorkerGroup -AutomationAccountId $automationAccountId -Filter "name eq '$hybridWorkerGroupName'" if (-not $hybridWorkerGroup) { Write-Error "未找到指定的Hybrid Worker Group" exit 1 } # 获取灾备VM资源ID $vmDNS1resource = Get-AzVM -ResourceGroupName $rgDRname | Where-Object { $_.Name -like "vm*DNS1" } if (-not $vmDNS1resource) { Write-Error "未找到符合命名规则的灾备VM" exit 1 } # 调用Graph API添加Hybrid Worker New-MgBetaAutomationAutomationAccountHybridRunbookWorkerGroupHybridRunbookWorker ` -AutomationAccountId $automationAccountId ` -HybridRunbookWorkerGroupId $hybridWorkerGroup.Id ` -BodyParameter @{ properties = @{ vmResourceId = $vmDNS1resource.Id } name = $vmDNS1resource.Name }
内容的提问来源于stack exchange,提问作者Ayanda ezekiel
相关产品推荐
相关产品推荐

