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

如何使用PowerShell检查Azure虚拟机是否启用备份?有无更简便方法?

如何用PowerShell检查Azure虚拟机的备份启用状态

当然可以!你提到的对比虚拟机列表和Recovery Services Vault配置的方法确实可行,但其实有更直接、高效的方式,不用手动匹配两个数据集,我来给你拆解几种实用方案:

方法1:通过Recovery Services模块直接关联VM与备份状态

如果你的VM都在同一个Recovery Services Vault下,可以直接通过模块查询已备份的VM,再和所有VM做关联,生成包含备份状态的列表:

# 替换为你的Recovery Services Vault名称和资源组
$vaultName = "YourRecoveryVaultName"
$resourceGroupName = "YourVaultResourceGroup"

# 获取Vault对象并设置上下文
$vault = Get-AzRecoveryServicesVault -Name $vaultName -ResourceGroupName $resourceGroupName
Set-AzRecoveryServicesVaultContext -Vault $vault

# 获取所有已备份的Azure虚拟机
$backedUpVMs = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM

# 获取所有虚拟机并添加备份状态属性
$allVMs = Get-AzVM
$VMsWithBackupStatus = $allVMs | ForEach-Object {
    $isProtected = $backedUpVMs.Name -contains $_.Name
    [PSCustomObject]@{
        VMName             = $_.Name
        ResourceGroupName  = $_.ResourceGroupName
        IsBackedUp         = $isProtected
        AssociatedBackupVault = if ($isProtected) { $vaultName } else { "未启用备份" }
    }
}

# 查看最终结果
$VMsWithBackupStatus

方法2:用Azure Resource Graph一键查询(推荐大量VM/多Vault场景)

如果你管理多个Recovery Services Vault或者跨订阅的VM,Azure Resource Graph是最简便的方式——它可以一次性跨资源查询所有VM的备份状态,不用逐个切换Vault上下文:

# 编写Resource Graph查询语句,获取VM及其备份关联信息
$backupStatusQuery = @"
Resources
| where type == 'Microsoft.Compute/virtualMachines'
| join kind=leftouter (
    Resources
    | where type == 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems'
    | where properties.dataSourceInfo.type == 'Microsoft.Compute/virtualMachines'
    | project 
        vmName = tostring(properties.dataSourceInfo.name),
        vaultName = split(id, '/')[8],
        backupPolicyName = split(properties.policyId, '/')[10]
) on $left.name == $right.vmName
| project 
    VMName = name,
    ResourceGroup = resourceGroup,
    IsBackedUp = iff(isnotnull(vaultName), '已启用', '未启用'),
    BackupVault = coalesce(vaultName, '无'),
    BackupPolicy = coalesce(backupPolicyName, '无')
"@

# 执行查询并输出结果
Search-AzGraph -Query $backupStatusQuery

补充说明

Azure虚拟机本身的对象属性里并没有直接存储备份状态——因为备份是由Recovery Services Vault独立管理的,所以必须通过Vault资源或Resource Graph来获取关联信息。上面的Resource Graph方法是最省心的,尤其是大规模VM管理场景,能大幅节省操作时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:28:42