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

如何修改PowerShell脚本异步删除Azure恢复服务保管库所有备份项

批量异步删除Azure恢复服务保管库备份项(PowerShell 5兼容)

问题原因

Disable-AzRecoveryServicesBackupProtection cmdlet在适配PowerShell 5的旧版Az模块中未实现-AsJob参数,直接使用会报错。我们可以用PowerShell原生的Start-Job命令封装删除操作,实现异步发起批量删除请求。

修改后的脚本

## Variables
$rgBackup = Read-Host -Prompt "Resource group name"
$vaultName = Read-Host -Prompt "Recovery service vault name" 
$vault = Get-AzRecoveryServicesVault -ResourceGroupName $rgBackup -Name $vaultName
$count = 0
$jobs = @() # 用于存储异步任务对象,可选用于后续跟踪状态
 
## ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 ## Disable soft delete for the Azure Backup Recovery Services vault
Set-AzRecoveryServicesVaultProperty -Vault $vault.ID -SoftDeleteFeatureState Disable
Write-Host ("`n # Soft delete disabled for Recovery Service vault " + $vault.Name)

## ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

## Check if there are backup items in a soft-deleted state and reverse the delete operation
$containerSoftDelete = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL  -VaultId $vault.ID | Where-Object {$_.DeleteState -eq "ToBeDeleted"}

foreach ($item in $containerSoftDelete) {
    Undo-AzRecoveryServicesBackupItemDeletion -Item $item -VaultId $vault.ID -Force -Verbose
}

Write-Host ("`n# Undeleted all backup items in a soft deleted state in Recovery Services vault " + $vault.Name)

## ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

## Stop protection and delete data for all backup-protected items (异步版本)
$containerBackup = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM -VaultId $vault.ID | Where-Object {$_.DeleteState -eq "NotDeleted"}

foreach ($item in $containerBackup) {
    # 用Start-Job封装删除操作,异步发起
    $job = Start-Job -ScriptBlock {
        param($item, $vaultId)
        Disable-AzRecoveryServicesBackupProtection -Item $item -VaultId $vaultId -RemoveRecoveryPoints -Force -Verbose
    } -ArgumentList $item, $vault.ID

    $jobs += $job
    $count++
    Write-Host "$count - 删除指令已发起,任务ID: $($job.Id)"
}

# 可选:等待所有异步任务完成(如果需要确认全部删除完成才结束脚本)
# Write-Host "`n等待所有删除任务完成..."
# Wait-Job -Job $jobs
# Write-Host "所有删除任务已完成"

Write-Host ("`n# 已为所有云备份项发起删除指令,Recovery Services vault: " + $vault.Name)

关键修改说明

  • 新增$jobs数组存储异步任务对象,方便后续跟踪任务状态(可选)
  • 用Start-Job封装删除命令,通过-ArgumentList传递参数(job作用域独立,必须显式传参)
  • 输出调整为提示指令已发起,而非直接标注删除完成(异步操作在后台执行)
  • 保留可选的Wait-Job代码块,若需脚本等待所有删除操作完成再退出,可取消注释

注意事项

  • 批量异步请求可能触发Azure限流,若遇报错,可在foreach循环中添加Start-Sleep -Seconds 1控制请求频率
  • 可用Get-Job查看任务状态,Receive-Job获取任务输出日志

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:07:40