PowerShell 是执行虚拟机灾难恢复的核心工具,支持 Azure VM 和 Hyper-V VM 的复制、故障转移、重新保护及故障回复等自动化操作,并涵盖应急重启、重部署与状态验证等关键流程。
powershell 是执行虚拟机灾难恢复(dr)的核心工具,尤其在 azure 和 hyper-v 环境中,它能自动化复制、故障转移、重新保护和故障回复等关键操作。重点不在于手动点选,而在于用脚本控制恢复节奏、验证状态、规避人为遗漏。
一、Azure VM 灾难恢复:用 PowerShell 启用并触发故障转移
适用于 Azure 到 Azure 或本地到 Azure 的场景,依赖 Azure Site Recovery(ASR)服务。
- 先创建恢复服务保管库,并设置上下文:
Connect-AzAccount
$rg = "myResourceGroup"
$vault = New-AzRecoveryServicesVault -Name "myRecoveryServicesVault" -ResourceGroupName $rg -Location "East US"
Set-AzRecoveryServicesAsrVaultContext -Vault $vault - 为目标 VM 启用复制前,需准备缓存存储帐户、创建网络映射、配置复制策略;启用后数据会持续同步生成恢复点
- 执行计划内故障转移(测试或真实切换):
$vm = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $primaryContainer | Where-Object {$_.FriendlyName -eq "myVM"}
Start-AzRecoveryServicesAsrFailoverJob -InputObject $vm -Direction PrimaryToRecovery - 故障转移完成后,目标区域 VM 将启动;如需回切,先运行 Reprotect,再执行反向故障转移(Failback)
二、Hyper-V 虚拟机副本:用 PowerShell 手动或自动故障转移
本地 Hyper-V 副本不依赖 Azure,但需提前配置主/副本主机及复制关系。PowerShell 提供原生命令直接干预。
- 检查副本健康状态:
Get-VMReplication | Format-Table Name, State, Health, LastReplicationTime - 执行测试故障转移(不中断生产):
Start-VMFailover -VMName "WebApp-01" -AsTest -Confirm:$false
测试 VM 会在副本主机上以“_Test”后缀启动,用于验证而不影响源端 - 执行真实故障转移(源端不可用时):
Start-VMFailover -VMName "WebApp-01" -Confirm:$false
Complete-VMFailover -VMName "WebApp-01"
注意:此操作不可逆,完成后源 VM 将停止复制,需手动重建副本关系
三、应急重启与重部署:当 VM 卡死但未彻底宕机
这不是传统 DR,却是高频救命操作——避免误删资源或重装系统,保留所有挂载磁盘和网络配置。
- 通过 PowerShell 触发 Azure VM 重新部署(即迁移至新宿主机):
Connect-AzAccount
$rg = "myRG"
$vmName = "app-server-01"
Invoke-AzVMRestart -ResourceGroupName $rg -Name $vmName -Force # 普通重启
Invoke-AzVMRedeploy -ResourceGroupName $rg -Name $vmName # 重新部署(关键!) - 该操作保留:数据磁盘内容、NIC 配置、公网 IP、NSG 关联;仅丢失临时磁盘(
/mnt)数据 - 执行后建议立即检查串行控制台日志,确认 OS 完全启动且服务就绪
四、辅助操作:提升恢复可靠性与可追溯性
单次命令只是起点,真正健壮的 DR 流程需要验证、记录和清理机制。
- 故障转移后自动验证关键服务是否响应:
Test-NetConnection -ComputerName "recovered-app.internal" -Port 443 - 将每次 DR 操作记录到本地日志:
"$((Get-Date).ToString()) - Failover completed for $vmName" | Out-File C:\DR\logs\failover.log -Append - AD 域控类关键角色故障时,配合
ntdsutil或 PowerShell FSMO 抢占命令,确保身份服务连续性(如Move-ADDirectoryServerOperationMasterRole)

















