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

如何获取订阅内所有VM的备份信息及Get-AzVM -Status结果

解决方案

可以通过PowerShell结合Azure模块,先分别抓取VM状态数据和备份关联数据,再通过VM的唯一资源ID完成关联,最终整合出包含备份信息的完整VM列表。以下是可直接运行的脚本:

# 1. 获取订阅内所有VM的状态信息
$vmList = Get-AzVM -Status

# 2. 遍历所有恢复服务保管库,抓取VM备份项数据
$backupItems = Get-AzRecoveryServicesVault | ForEach-Object {
    Set-AzRecoveryServicesVaultContext -Vault $_
    Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM
}

# 3. 关联VM与备份数据,提取所需字段
$result = $vmList | ForEach-Object {
    $currentVM = $_
    # 通过资源ID匹配对应的备份项
    $matchedBackup = $backupItems | Where-Object { $_.SourceResourceId -eq $currentVM.Id }

    # 若有备份项,拉取对应的备份策略详情
    $backupPolicy = if ($matchedBackup) { 
        Get-AzRecoveryServicesBackupPolicy -Name $matchedBackup.PolicyName 
    } else { $null }

    # 解析备份计划和保留规则
    $schedule = $backupPolicy?.SchedulePolicy
    $retentionRules = $backupPolicy?.RetentionPolicy

    # 组装最终输出对象
    [PSCustomObject]@{
        VMName               = $currentVM.Name
        ResourceGroup        = $currentVM.ResourceGroupName
        PowerState           = $currentVM.Statuses[1].DisplayStatus
        BackupPolicyName     = $matchedBackup?.PolicyName
        BackupScheduleType   = $schedule?.ScheduleRunFrequency
        BackupTimes          = if ($schedule?.ScheduleRunFrequency -eq "Daily") { 
            $schedule.ScheduleRunTimes -join ", " 
        } else { 
            $schedule?.ScheduleRunWeekly?.DaysOfWeek -join ", " 
        }
        DailyRetentionDays   = $retentionRules?.DailyRetention.DurationCount
        WeeklyRetentionWeeks = $retentionRules?.WeeklyRetention.DurationCount
        MonthlyRetentionMonths= $retentionRules?.MonthlyRetention.DurationCount
    }
}

# 输出结果(可按需导出为CSV)
$result | Format-Table -AutoSize
# $result | Export-Csv -Path ".\VM_Backup_Details.csv" -NoTypeInformation

关键说明

  • 关联逻辑:用VM的Id(资源ID)匹配备份项的SourceResourceId,这是最可靠的关联方式,避免同一订阅内重名VM的冲突。
  • 备份字段解析:通过备份项的PolicyName拉取完整策略,从中拆分出计划类型、执行时间、各维度保留周期。未配置备份的VM,对应字段会显示为空。
  • 前置准备:确保已安装最新版Azure模块:Install-Module -Name Az.RecoveryServices, Az.Compute -Force -AllowClobber;执行前需登录Azure并切换到目标订阅:Connect-AzAccount、Set-AzContext -SubscriptionId "你的订阅ID"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:22:10