使用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 "没有找到处于运行中的备份作业" }
三、额外排查点
- 确认作业状态:你可以先执行以下命令查看所有备份作业的状态,确认是否有正在运行的作业:
$myVault.ID | Get-AzRecoveryServicesBackupJob -Operation Backup | Select-Object JobId, Status, Operation, StartTime
- 模块版本检查:确保你的Az.RecoveryServices模块是最新版本,避免因旧模块的兼容性问题导致异常:
Update-Module -Name Az.RecoveryServices -Force
内容的提问来源于stack exchange,提问作者Mattman5000
相关产品推荐
相关产品推荐

