You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell每小时触发Azure文件共享按需备份及Runbook报错排查

解决建议

错误根源分析

你的代码逻辑存在核心问题:在未完成Azure身份验证的情况下,就尝试创建新的服务主体(New-AzADServicePrincipal),而该命令必须依赖已验证的Azure上下文才能执行。此外,Azure自动化Runbook无需手动创建服务主体,应利用自动化账户的托管身份完成身份验证,这是更安全且符合Azure最佳实践的方式。


具体解决步骤

1. 为自动化账户启用系统分配托管身份

  1. 登录Azure门户,找到目标自动化账户
  2. 在左侧菜单「账户设置」下选择「身份」
  3. 切换到「系统分配」标签,将状态设为「开启」,点击「保存」

2. 为托管身份分配必要权限

给自动化账户的系统分配托管身份添加以下角色权限:

  • Recovery Services 参与者:作用于你的Recovery Services Vault,用于执行备份操作
  • 存储账户参与者:作用于文件共享所在的存储账户,用于访问目标资源
  • 备份操作员(可选):细化备份相关操作的权限范围

操作方式:

  1. 打开目标Recovery Services Vault,进入「访问控制(IAM)」
  2. 点击「添加角色分配」,选择对应角色,成员类型选「托管身份」,再选择你的自动化账户身份
  3. 对目标存储账户重复上述权限分配操作

3. 修改Runbook代码(使用托管身份登录)

移除手动创建服务主体的冗余逻辑,直接利用托管身份自动完成Azure登录:

# 利用自动化账户系统分配托管身份登录Azure
Connect-AzAccount -Identity

# 设置Recovery Services Vault上下文
$vault = Get-AzRecoveryServicesVault -Name "vault641"
Set-AzRecoveryServicesVaultContext -Vault $vault

# 获取对应存储账户的备份容器
$afsContainer = Get-AzRecoveryServicesBackupContainer -FriendlyName "testtest" -ContainerType AzureStorage

# 获取目标文件共享的备份项
$afsBkpItem = Get-AzRecoveryServicesBackupItem -Container $afsContainer -FriendlyName "test" -WorkloadType "AzureFiles"

# 触发按需备份作业
$job = Backup-AzRecoveryServicesBackupItem -Item $afsBkpItem

# 可选:等待备份作业完成(超时时间1小时)
Wait-AzRecoveryServicesBackupJob -Job $job -Timeout 3600

4. 验证并升级自动化账户模块版本

确保自动化账户中的Az模块(尤其是Az.RecoveryServices、Az.Resources)为最新稳定版:

  1. 进入自动化账户的「模块」页面
  2. 检查目标模块版本,若版本过低,点击「更新」按钮完成升级

额外注意事项

  • 确保目标文件共享已被Azure Backup保护(已添加到Recovery Services Vault的备份策略中,即使策略间隔为4小时,仍可触发按需备份)
  • 按需备份频率需合理控制,避免超出Azure Backup限制或产生不必要的存储成本

内容的提问来源于stack exchange,提问作者taka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:45:36