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

PowerShell中如何在while循环内执行指定命令指定次数后结束脚本

解决方案

实现思路

  • 定义$maxRetry变量指定最大重新发布次数,$retryCount变量记录已重试次数,两个变量都放在while循环外初始化
  • 检测到Rejected状态时,先判断剩余重试次数:未达上限就执行重新发布命令,累加计数后继续轮询;达到上限直接终止脚本
  • 原有120分钟超时逻辑、发布成功结束逻辑完全保留,不影响原有功能

完整修改后代码

# 配置参数:120分钟超时,最大重新发布3次
$timer = New-TimeSpan -Minutes 120
$maxRetry = 3 # 此处可修改为你需要的重试次数
$retryCount = 0

$sw = [diagnostics.stopwatch]::StartNew()
while ($sw.elapsed -lt $timer) {  
    $ReleaseStatus = Invoke-RestMethod -Uri "https://vsrm.dev.azure.com/company/Project/_apis/release/releases/$RId/environments/$EId/?`api-version=6.0" -Method GET -Headers $Header -Verbose
    Start-Sleep -Seconds 10
    # 发布成功直接结束脚本
    if ($ReleaseStatus.Status -eq 'Succeeded') {
        Write-Host "Release Succeeded"
        return
    }
        
    # 发布被拒绝时触发重试逻辑
    if ($ReleaseStatus.Status -eq 'Rejected') {
        # 未达到重试上限则触发重新发布
        if ($retryCount -lt $maxRetry) {
            $retryCount++
            Write-Host "Release failed, start $retryCount/$maxRetry re-release attempt"
            # 这里替换为你实际的重新发布命令
            # 示例:Invoke-RestMethod 调用Azure DevOps重新发布接口
            
            # 重新发布后可适当延长等待时间,避免刚触发就查询状态
            Start-Sleep -Seconds 30
            continue # 直接进入下一轮轮询检查新的发布状态
        }
        # 重试次数耗尽,结束脚本
        else {
            Write-Host "Maximum $maxRetry re-release attempts reached, script terminated"
            return
        }
    }
}

# 超时退出逻辑
Write-Host "Release polling timed out after 120 minutes"

调整说明

  • 你可以直接修改$maxRetry的数值调整最大重新发布次数
  • 重新发布命令执行后额外增加了30秒等待时间,避免刚触发发布就查询还没更新的状态,可根据实际发布耗时调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:02