如何让循环PowerShell脚本遇429状态码直接退出(无需do/try/catch)
实现方法
你可以直接捕获Invoke-WebRequest的响应对象,判断其状态码是否为429,满足条件时直接调用exit退出脚本。需要注意的是,默认情况下Invoke-WebRequest遇到非2xx状态码会抛出终止错误,所以要加上-ErrorAction SilentlyContinue参数,避免脚本因报错直接中断,这样才能正常获取状态码并判断。
修正后的完整代码如下:
# 正确定义请求头哈希表 $headers = @{ 'header' = 'header' } $req = @{ Uri = 'https://mywebsite.com/api/' Headers = $headers Method = 'Get' ContentType = 'application/json' } while($true){ # 捕获响应对象,忽略非2xx状态码的报错 $response = Invoke-WebRequest @req -ErrorAction SilentlyContinue # 检查状态码是否为429,是则退出脚本 if ($response.StatusCode -eq 429) { exit } # 可添加等待逻辑避免频繁请求 Start-Sleep -Seconds 1 }
关键说明
-ErrorAction SilentlyContinue:让Invoke-WebRequest遇到非成功状态码时不抛出错误,而是返回响应对象,确保能读取其StatusCode属性。- 直接判断
$response.StatusCode -eq 429:满足条件时调用exit直接终止脚本,完全不需要do/try/catch结构。
内容的提问来源于stack exchange,提问作者nomiks
相关产品推荐
相关产品推荐

