如何用PowerShell或C#获取AzureRM中‘文件和文件夹’备份作业状态
解决AzureRM环境下获取多客户MARS备份作业状态的问题
我来帮你搞定这个问题!你之前的PowerShell命令没串联完整,而且缺少获取备份作业的关键步骤,试试下面的完整方案:
核心问题说明
原命令的问题在于:
- 没有正确分隔多个PowerShell命令(应该用分号或换行分隔)
- 仅获取了备份容器,但没有关联查询对应的备份作业
- AzureRM的备份命令需要针对每个Recovery Services Vault单独设置上下文
完整PowerShell脚本
# 获取当前订阅下所有的Recovery Services Vault $allVaults = Get-AzureRmRecoveryServicesVault # 遍历每个Vault,查询其下的MARS备份作业 foreach ($vault in $allVaults) { # 切换到当前Vault的上下文(这一步非常关键,备份命令依赖上下文) Set-AzureRmRecoveryServicesVaultContext -Vault $vault # 获取该Vault下所有MARS类型的备份容器(对应Windows客户端/服务器的文件备份) $marsContainers = Get-AzureRmRecoveryServicesBackupContainer -ContainerType Windows -BackupManagementType MARS # 遍历每个容器,查询对应的备份作业 foreach ($container in $marsContainers) { # 查询该容器下所有状态的备份作业,可按需过滤状态(比如Failed/Completed/InProgress) $backupJobs = Get-AzureRmRecoveryServicesBackupJob -Status All -BackupManagementType MARS -Container $container # 格式化输出作业关键信息,可根据需求添加更多属性 Write-Host "=== 来自Vault: $($vault.Name),容器: $($container.FriendlyName) 的备份作业 ===" $backupJobs | Select-Object Operation, Status, StartTime, EndTime, Duration, ErrorMessage | Format-Table -AutoSize } }
关键细节说明
- 上下文切换:每个Recovery Services Vault都需要单独设置上下文,否则备份命令无法定位到目标资源
- 作业过滤:如果只需要特定状态的作业,把
-Status All换成Failed、Completed或者InProgress即可 - 导出结果:如果需要把结果保存到文件,可将
Format-Table替换为Export-Csv -Path "MultiTenantBackupJobs.csv" -Append -NoTypeInformation,方便后续分析 - 权限要求:确保你的账号拥有所有目标Recovery Services Vault的
Backup Reader或更高权限
额外建议
AzureRM模块已经停止更新,微软推荐迁移到Azure Az模块,迁移后只需要把命令中的AzureRm替换为Az即可(比如Get-AzRecoveryServicesVault),功能完全兼容。
内容的提问来源于stack exchange,提问作者Dan Einarsson
相关产品推荐
相关产品推荐

