如何在Azure中使用PowerShell将诊断设置从一个资源复制到另一个资源
问题根因
你原有代码报错的核心原因是调用Set-AzDiagnosticSetting时仅传递了配置名称与目标资源ID,未传递诊断设置的核心配置项,缺少必填参数触发报错。
修复后完整代码
# 建议明确指定资源组与资源类型,避免同名资源匹配错误 $sourceRG = "你的源资源组名称" $targetRG = "你的目标资源组名称" $sqlDBResourceType = "Microsoft.Sql/servers/databases" # 获取源资源 $sourceResource = Get-AzResource -Name "aaa-bbb-ccc-sql/TemplateJob" -ResourceGroupName $sourceRG -ResourceType $sqlDBResourceType $sourceResourceId = $sourceResource.Id Write-Output "源资源ID: $sourceResourceId" # 获取源诊断设置 $diagnosticSetting = Get-AzDiagnosticSetting -ResourceId $sourceResourceId # 获取目标资源 $targetResource = Get-AzResource -Name "aaa-bbb-ccc-sql/Test4" -ResourceGroupName $targetRG -ResourceType $sqlDBResourceType $targetResourceId = $targetResource.Id Write-Output "目标资源ID: $targetResourceId" # 完整传递所有诊断配置项到目标资源 Set-AzDiagnosticSetting ` -Name $diagnosticSetting.Name ` -ResourceId $targetResourceId ` -StorageAccountId $diagnosticSetting.StorageAccountId ` -EventHubName $diagnosticSetting.EventHubName ` -EventHubAuthorizationRuleId $diagnosticSetting.EventHubAuthorizationRuleId ` -WorkspaceId $diagnosticSetting.WorkspaceId ` -Log $diagnosticSetting.Logs ` -Metric $diagnosticSetting.Metrics
注意事项
- 执行前请确保你登录的Azure账号对源、目标资源,以及诊断配置关联的存储账户、事件中心、Log Analytics工作区有至少贡献者权限
- 如果跨订阅复制,需要保证诊断配置关联的所有外部资源(存储/事件中心/LA工作区)和目标资源归属同一个Azure AD租户
- 若执行仍然报错提示不支持的日志/指标类别,可以先调用
Get-AzDiagnosticSettingCategory -ResourceId $targetResourceId获取目标资源支持的类别,过滤掉源配置中不被目标支持的类别后再执行设置操作
内容的提问来源于stack exchange,提问作者Toufic Makhoul
相关产品推荐
相关产品推荐

