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

Azure Automation中PowerShell 7.2执行GET请求返回400错误求助

PowerShell 7.2中Invoke-RestMethod GET请求返回400错误的解决方法

问题描述

在Azure Automation环境中,以下GET请求代码在PowerShell 5.1可正常运行,但PowerShell 7.2执行时返回400错误;同时7.2中执行POST/UPDATE请求无异常。已测试Invoke-RestMethod带/不带UseBasicParsing参数的情况,结果一致。因已有适配该站点的PowerShell 7模块,需解决7.2的GET请求问题。

测试代码:

$Params = @{
    Headers = @{
        "Authorization" = "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        "x-4me-account" = "XXXXXXXX"
    }
    URI = 'https://api.4me.qa/v1/requests'
}
Invoke-RestMethod @Params

针对性排查与修复方案

PowerShell 7.x与5.1在Invoke-RestMethod的默认行为上存在差异,以下是具体解决步骤:

1. 显式指定Accept请求头

PowerShell 7.x默认的Accept头格式可能与5.1不同,部分API对该字段敏感,尝试添加明确的JSON格式声明:

$Params = @{
    Headers = @{
        "Authorization" = "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        "x-4me-account" = "XXXXXXXX"
        "Accept" = "application/json"
    }
    URI = 'https://api.4me.qa/v1/requests'
}
Invoke-RestMethod @Params

2. 禁用自动解压缩与跳过头验证

PowerShell 7.x默认启用自动解压缩,而5.1未默认开启,部分API对此处理逻辑不一致,可添加相关参数调整:

$Params = @{
    Headers = @{
        "Authorization" = "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        "x-4me-account" = "XXXXXXXX"
    }
    URI = 'https://api.4me.qa/v1/requests'
    DisableAutoRedirect = $true
    SkipHeaderValidation = $true
    ContentEncoding = 'utf8'
}
Invoke-RestMethod @Params

3. 模拟PowerShell 5.1的User-Agent头

部分API会校验请求的User-Agent标识,PowerShell 7.x的默认标识与5.1不同,可替换为5.1的格式:

$Params = @{
    Headers = @{
        "Authorization" = "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        "x-4me-account" = "XXXXXXXX"
        "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.19041; en-US) PowerShell/5.1.19041.3031"
    }
    URI = 'https://api.4me.qa/v1/requests'
}
Invoke-RestMethod @Params

4. 显式指定GET请求方法

尽管Invoke-RestMethod默认使用GET方法,但显式声明可避免PowerShell版本间的隐式逻辑差异:

$Params = @{
    Method = 'GET'
    Headers = @{
        "Authorization" = "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        "x-4me-account" = "XXXXXXXX"
    }
    URI = 'https://api.4me.qa/v1/requests'
}
Invoke-RestMethod @Params

5. 捕获详细错误信息定位问题

使用Invoke-WebRequest配合错误捕获,获取400错误的具体响应内容,进一步排查差异:

try {
    $response = Invoke-WebRequest @Params -PassThru -ErrorAction Stop
} catch {
    Write-Host "错误信息: $($_.Exception.Message)"
    Write-Host "响应详情: $($_.ErrorDetails.Message)"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:30:02