PowerShell 5.1中Invoke-Restmethod如何捕获200成功状态码
PowerShell 5.1 环境下Invoke-RestMethod捕获200成功状态码实现方案
PowerShell 5.1中Invoke-RestMethod默认仅返回解析后的请求内容(JSON/XML等格式自动转换为对应对象),2xx类成功状态码不会直接暴露在返回值中,try/catch默认仅会捕获4xx/5xx类错误状态,可通过以下两种方式获取200状态码:
方法1:读取返回对象的隐藏响应属性(不改变原有Invoke-RestMethod使用习惯)
Invoke-RestMethod在5.1版本中会将完整HTTP响应信息作为隐藏属性附加在解析后的返回对象上,直接通过PSObject成员访问即可拿到状态码,示例代码如下:
# 配置错误为终止异常,保证异常场景能进入catch块 $ErrorActionPreference = 'Stop' try { # 发起请求,结果存入变量 $result = Invoke-RestMethod -Uri "你的目标请求地址" -Method Get -ContentType "application/json" # 从隐藏属性中提取状态码,显式转为整数类型 $statusCode = [int]$result.PSObject.Properties['Response'].Value.StatusCode if ($statusCode -eq 200) { # 200状态码下的自定义处理逻辑 Write-Host "请求成功,状态码200,返回内容:$result" } } catch { # 错误场景状态码从异常对象中提取 $statusCode = [int]$_.Exception.Response.StatusCode Write-Host "请求异常,状态码:$statusCode,错误信息:$($_.Exception.Message)" } finally { # 还原默认错误配置 $ErrorActionPreference = 'Continue' }
方法2:用Invoke-WebRequest获取响应后手动解析内容(兼容性最稳定)
如果觉得隐藏属性访问方式不稳定,可以换用同模块的Invoke-WebRequest先拿到完整响应对象,读取状态码后手动解析内容,解析效果和Invoke-RestMethod完全一致,示例代码如下:
$ErrorActionPreference = 'Stop' try { # 发起请求拿到完整响应对象 $response = Invoke-WebRequest -Uri "你的目标请求地址" -Method Get -ContentType "application/json" $statusCode = [int]$response.StatusCode if ($statusCode -eq 200) { # 手动解析JSON内容为PS对象,和Invoke-RestMethod默认行为一致 $result = $response.Content | ConvertFrom-Json Write-Host "请求成功,状态码200,解析后内容:$result" } } catch { $statusCode = [int]$_.Exception.Response.StatusCode Write-Host "请求异常,状态码:$statusCode,错误信息:$($_.Exception.Message)" } finally { $ErrorActionPreference = 'Continue' }
注意事项
- PowerShell 5.1版本没有
-ResponseVariable参数,该参数为PowerShell 7及以上版本新增,不要直接套用高版本语法 - 状态码建议显式转为整数类型再判断,默认返回值是枚举类型,直接比对可能出现类型不匹配问题
- 如果接口返回204无内容类的成功响应,方法1中
$result可能为$null,此时请使用方法2实现
内容的提问来源于stack exchange,提问作者wehelpdox
相关产品推荐
相关产品推荐

