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

PowerShell中Invoke-RestMethod报401未授权,Postman却可正常请求

PowerShell调用REST API遇401未授权问题排查

初始代码与变更需求

原本可正常调用REST API的PowerShell代码如下:

$r = 'myRestApiEndpoint'

$h = @{
maxauth = 'myBase64EncodedString'
}

$r = Invoke-RestMethod -Uri $url -Headers $h

因ITSM工具变更,授权方式调整:不再使用maxauth请求头,改为authorization请求头,且需在Base64编码字符串前添加“Basic”前缀,修改后的代码如下:

$r = 'myRestApiEndpoint'

$h = @{
authorization = 'Basic myBase64EncodedString'
}

$r = Invoke-RestMethod -Uri $url -Headers $h

问题现象

使用新请求头在Postman中可获得200 OK响应并正常获取数据,但在PowerShell中执行上述代码时,返回401未授权错误:

Invoke-RestMethod : The remote server returned an error: (401) Unauthorized.
At H:\Connectors\ITSM\connector.ps1:61 char:6
$r = Invoke-RestMethod -Uri $url -Headers $h
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) 
[Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : 
WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

尝试去掉“Basic”前缀后,仍得到相同的401错误,怀疑授权信息未正确发送至API服务,但无法定位原因。

排查过程

编辑1:调整代码格式后的现象

将代码改为更易读的格式:

$base64 = 'myBase64'
$basicAuthValue = "Basic $base64"

$h = @{
    authorization = $basicAuthValue
    maxauth = $base64
}

这段代码可正常运行;但注释掉maxauth行后,会再次出现401未授权错误。打印$basicAuthValue显示内容与Postman中正常运行的“Basic myBase64”完全一致,API端点等所有信息也均相同。

编辑2:最终定位问题

经确认,此前提及的ITSM工具变更实际是环境迁移,但运维人员并未迁移原有环境,而是新建了一个全新环境。新环境虽包含所有用户,但使用了默认用户名,导致原本的Base64编码凭证始终错误。

另外,此前Postman可正常请求,今日重试却失败,推测Postman可能缓存了旧的maxauth凭证,因此之前能正常请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:52:29