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

PowerShell 7调用Invoke-RestMethod返回401未授权但5.1运行正常

问题根因

PowerShell 7基于.NET Core/.NET 5+开发,和基于.NET Framework的PowerShell 5.1的HTTP请求处理逻辑存在差异:默认使用的SocketsHttpHandler对非HTTPS请求的Windows集成认证(Negotiate/NTLM)协商逻辑做了限制,收到401质询后不会自动触发后续的认证令牌提交流程,即使加了-AllowUnencryptedAuthentication参数也不会主动响应Negotiate类型的认证质询。

可行解决方案

  1. 主动指定认证类型
    在PowerShell 7的命令中新增-Authentication Negotiate参数,强制命令收到401质询后主动用当前用户的默认凭证生成Negotiate令牌完成认证,修改后命令如下:
Invoke-RestMethod "http://internalServer/api/job?name=testJob" -Method GET -UseDefaultCredentials -ContentType "application/JSON" -AllowUnencryptedAuthentication -Authentication Negotiate

如果服务器仅开启了NTLM认证未开启Negotiate,将参数值替换为Ntlm即可。

  1. 回退到兼容PowerShell 5.1的HTTP处理程序
    如果上述参数不生效,可以在运行请求前先执行以下代码,将PowerShell 7的HTTP处理程序切换为和5.1一致的实现,再执行原请求即可恢复相同的认证行为:
Add-Type @"
using System;
using System.Net;
public class AuthCompatConfig {
    public static void EnableLegacyHttpHandler() {
        AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
        ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault;
    }
}
"@
[AuthCompatConfig]::EnableLegacyHttpHandler()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:57:02