PowerShell执行小规模POST负载测试时无法获取HTTP响应码问题
问题根因
核心问题是 Invoke-RestMethod cmdlet 成功返回时,输出的是解析后的响应体内容(比如JSON自动转成的PowerShell对象、文本内容等),并不包含HTTP响应元数据,所以你尝试获取 .StatusCode 属性的操作会返回空值。只有请求触发异常进入 catch 块时,你从异常对象中提取的状态码才会正常生效,这就是你控制台打印为空的原因。
修复方案
方案1:兼容所有PowerShell版本(推荐)
改用 Invoke-WebRequest 替代 Invoke-RestMethod,该cmdlet成功返回的对象自带 StatusCode 属性,仅修改Try块内的代码即可:
Try{ $response = Invoke-WebRequest -Uri $URL -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines $SC = $response.StatusCode } catch{ $SC = $_.Exception.Response.StatusCode.value__ }
方案2:PowerShell 6.1及以上版本可用
直接使用 Invoke-RestMethod 自带的 -StatusCodeVariable 参数,直接将响应状态码存入指定变量,无需手动提取:
Try{ # 此处-StatusCodeVariable后跟的变量名不需要加$,执行后会自动生成$SC变量存储状态码 Invoke-RestMethod -Uri $URL -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines -StatusCodeVariable SC } catch{ $SC = $_.Exception.Response.StatusCode.value__ }
附加说明
如果你的API返回非2xx状态码也属于正常业务逻辑,还可以添加 -SkipHttpErrorCheck 参数(PowerShell 7+支持),让请求不会因为非2xx状态码进入异常块,直接正常返回响应对象即可。
内容的提问来源于stack exchange,提问作者T-Heron
相关产品推荐
相关产品推荐

