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

使用Stop-AzRecoveryServicesBackupJob PowerShell命令终止Azure备份作业时遇到Bad Request错误及参数困惑的技术问询

解决Stop-AzRecoveryServicesBackupJob的Bad Request错误

首先,咱们先拆解你遇到的问题:虽然你一开始怀疑是JobId/InstanceId的参数问题,但错误信息已经明确指出了核心原因:你尝试终止的作业并非处于「运行中(InProgress)」状态——只有运行中的备份作业才允许被取消。

一、先理清JobId vs InstanceId的困惑

你提到官方文档里说需要传入-JobID $Job.InstanceId,但实际获取的作业对象只有JobId属性,这是因为文档可能存在版本滞后的问题。在当前的Az.RecoveryServices模块中,Get-AzRecoveryServicesBackupJob返回的作业对象里,JobId就是唯一标识作业的正确属性,所以你用-JobID $BackupJob.JobId的写法是没问题的,这不是导致Bad Request的原因。

二、核心解决方案:只终止运行中的作业

要解决这个错误,你需要在获取作业后先过滤出状态为InProgress的作业,再执行终止操作。同时要注意:Get-AzRecoveryServicesBackupJob -Operation Backup可能返回多个作业(比如历史备份作业),所以需要明确筛选目标作业。

修正后的代码示例:

# 获取恢复服务保管库(RSV)
$myVault = Get-AzRecoveryServicesVault -ResourceGroupName $myResourceGroup -Name $vaultName
# 禁用RSV的软删除功能
$myVault.ID | Set-AzRecoveryServicesVaultProperty -SoftDeleteFeatureState Disable | Out-Null

# 获取处于运行中的备份作业(关键:过滤InProgress状态)
$runningBackupJobs = $myVault.ID | Get-AzRecoveryServicesBackupJob -Operation Backup | Where-Object { $_.Status -eq "InProgress" }

# 遍历并终止每个运行中的作业
if ($runningBackupJobs) {
    foreach ($job in $runningBackupJobs) {
        Write-Host "正在终止作业:$($job.JobId)"
        Stop-AzRecoveryServicesBackupJob -JobID $job.JobId
    }
} else {
    Write-Host "没有找到处于运行中的备份作业"
}

三、额外排查点

  1. 确认作业状态:你可以先执行以下命令查看所有备份作业的状态,确认是否有正在运行的作业:
$myVault.ID | Get-AzRecoveryServicesBackupJob -Operation Backup | Select-Object JobId, Status, Operation, StartTime
  1. 模块版本检查:确保你的Az.RecoveryServices模块是最新版本,避免因旧模块的兼容性问题导致异常:
Update-Module -Name Az.RecoveryServices -Force

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:47:30