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
相关产品推荐
相关产品推荐

