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

如何在PowerShell中使用NTLM认证发起带请求体的POST请求?

在PowerShell中使用NTLM认证发起带请求体的POST请求

针对你遇到的POST请求用-UseDefaultCredentials返回401未授权的问题,核心原因是NTLM认证是挑战-响应式的协议,没法像Basic认证那样手动构造Authorization头,必须让PowerShell自动处理认证流程。下面给你两种可行的解决方案:

方案1:使用当前用户凭据(对应-UseDefaultCredentials场景)

如果目标服务器允许当前登录用户的NTLM凭据访问,只需要在Invoke-WebRequest中明确指定认证类型为NTLM即可——之前POST请求失败大概率是因为PowerShell自动协商认证时没有正确触发NTLM流程:

$myURL = "https://example.blah.etc"
$params = @"
{"EXAMPLE1":"STUFF"}
"@

Invoke-WebRequest -Uri $myURL `
                  -Method POST `
                  -ContentType "application/json" `
                  -Body $params `
                  -UseDefaultCredentials `
                  -Authentication NTLM | 
    Select-Object -ExpandProperty Content > "C:\output.json"

关键是加上-Authentication NTLM参数,强制PowerShell走NTLM认证流程,这样就能正确处理POST请求的授权逻辑了。

方案2:指定特定用户凭据

如果需要用非当前用户的账号发起请求,可以先创建PSCredential对象,再配合-Credential和-Authentication NTLM参数:

$myURL = "https://example.blah.etc"
$params = @"
{"EXAMPLE1":"STUFF"}
"@

# 构建凭据对象(用户名需包含域名,格式为domain\username或username@domain.com)
$username = "yourdomain\yourusername"
$password = ConvertTo-SecureString "yourpassword" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($username, $password)

Invoke-WebRequest -Uri $myURL `
                  -Method POST `
                  -ContentType "application/json" `
                  -Body $params `
                  -Credential $credential `
                  -Authentication NTLM | 
    Select-Object -ExpandProperty Content > "C:\output.json"

为什么之前的Basic认证头无效?

NTLM认证不是一次性的凭证传递,而是服务器先返回401挑战、客户端再生成响应的交互过程。手动构造Authorization: Basic ...头只适用于Basic认证,完全无法触发NTLM的挑战-响应流程,所以POST请求会被服务器拒绝。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:25:52