Windows Terminal 代理怎么配置?PowerShell、WinHTTP 与联网排障步骤

更新于 2026-10-18 · netcli.net

简答:Windows Terminal 只是终端窗口,代理是否生效取决于其中运行的 PowerShell、命令提示符、WSL 或具体程序。优先在当前终端设置 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY,再用 Invoke-WebRequest 或 curl.exe 验证;只有明确使用 WinHTTP 的程序,才检查或配置 netsh winhttp。

定义:Windows Terminal 代理是指为终端内运行的命令行程序提供网络出口的配置,常见作用层包括进程环境变量、PowerShell 请求参数和 Windows WinHTTP,而不是 Windows Terminal 窗口本身。

先判断:你要配置的是哪一层代理

“Windows Terminal 代理”不是单一开关。Windows Terminal 可以为某个 profile 注入环境变量,但实际发起网络请求的是 PowerShell、cmd、WSL 或其他命令行程序。微软文档说明,Windows Terminal 的 profile 支持使用 environment 对象设置仅对该 profile 生效的环境变量;这适合把代理配置限制在一个终端标签页中。Microsoft:Windows Terminal tips and tricks

现象或目标优先检查位置适合的处理方式
当前 PowerShell 下载或 API 请求失败当前进程环境变量设置 HTTP_PROXY、HTTPS_PROXY、NO_PROXY 后重新测试
只想让一个 Windows Terminal profile 使用代理Windows Terminal 的 profile 配置在对应 profile 的 environment 中配置变量
某个 Windows 服务或系统组件无法联网WinHTTP使用 netsh winhttp show proxy 查看
代理认证、证书或协议错误具体命令和代理服务先用显式代理参数测试,再区分账号、证书、端口和协议

PowerShell 7 及更高版本的默认代理行为会读取 Windows 上的代理环境变量;如果变量未定义,才可能使用用户代理设置。Windows PowerShell 5.1 也支持在 Invoke-WebRequest 中通过 -Proxy 为单次请求指定代理。Microsoft:Invoke-WebRequest Microsoft:Windows PowerShell 5.1 Invoke-WebRequest

在 Windows Terminal 当前会话中设置代理

下面命令适用于 Windows Terminal 中运行的 PowerShell。请把示例地址和端口替换为你已经确认的代理服务;不要把包含账号密码的代理地址粘贴到公共脚本、聊天记录或版本库中。

  1. 打开 Windows Terminal,确认当前标签页运行的是 PowerShell,然后查看是否已有代理变量:

    Get-ChildItem Env:*PROXY*

  2. 为当前 PowerShell 进程设置 HTTP、HTTPS 和绕过列表:

    $env:HTTP_PROXY = "http://127.0.0.1:7890"

    $env:HTTPS_PROXY = "http://127.0.0.1:7890"

    $env:NO_PROXY = "localhost,127.0.0.1"

  3. 再次查看变量,确认值已经写入当前会话:

    Get-ChildItem Env:*PROXY*

  4. 用 PowerShell 发起一次请求。把测试地址替换为你有权限访问的 HTTPS 地址:

    Invoke-WebRequest -Uri "https://example.com" -Method Head

  5. 如果需要只对单次请求指定代理,可以不修改环境变量:

    Invoke-WebRequest -Uri "https://example.com" -Proxy "http://127.0.0.1:7890" -Method Head

这些变量只影响当前 PowerShell 进程及其随后启动的子进程。关闭标签页后,使用 $env: 设置的值通常不会继续存在;如果要长期保存,应改用 profile 配置或系统环境变量,并在修改后重新打开终端。

清除当前会话中的代理变量可使用:

Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue

Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue

Remove-Item Env:ALL_PROXY -ErrorAction SilentlyContinue

Remove-Item Env:NO_PROXY -ErrorAction SilentlyContinue

只给某个 Windows Terminal profile 配置代理

如果你不希望影响其他标签页,可以编辑 Windows Terminal 的 settings.json,在目标 profile 内加入 environment 对象。微软文档给出的 profile 配置方式就是通过该对象向启动的命令行进程传递环境变量。Microsoft:Windows Terminal profile environment

示例结构如下,保留你原有 profile 的其他字段:

{ "name": "PowerShell - proxy", "source": "Windows.Terminal.PowershellCore", "environment": { "HTTP_PROXY": "http://127.0.0.1:7890", "HTTPS_PROXY": "http://127.0.0.1:7890", "NO_PROXY": "localhost,127.0.0.1" } }

  1. 在 Windows Terminal 中打开设置,进入 JSON 配置文件。

  2. 找到要修改的 profiles.list 项,将 environment 放进该 profile 对象中。

  3. 保存配置,关闭原有标签页并重新打开该 profile。

  4. 在新标签页执行 Get-ChildItem Env:*PROXY*,确认变量已经继承。

  5. 用 Invoke-WebRequest 或具体工具进行请求测试。

如果设置保存失败,先检查 JSON 的逗号、引号和大括号是否匹配。不要把代理密码直接写入 settings.json;如代理必须认证,优先使用组织提供的安全凭据方式,或只在当前会话临时测试。

WinHTTP 代理与 Windows Terminal 环境变量不是一回事

netsh winhttp 管理的是 Windows HTTP Services 使用的 WinHTTP 配置。它不等同于当前 PowerShell 的 HTTP_PROXY 环境变量,也不代表所有终端程序都会读取该配置。微软文档将 netsh winhttp show proxy 用于查看当前 WinHTTP 代理,并将 netsh winhttp reset proxy 用于恢复为直接连接。Microsoft:netsh winhttp

先查看,不要直接修改:

netsh winhttp show proxy

如果目标程序明确依赖 WinHTTP,再根据管理员或网络团队提供的参数配置。对于需要同时设置 HTTP 和 HTTPS 的场景,微软当前文档优先介绍 set advproxy;旧式 set proxy 在相关文档中已标注为弃用。

清除 WinHTTP 代理:

netsh winhttp reset proxy

执行 reset 后应重新打开依赖该配置的程序;如果这是服务或企业设备,还要确认该配置是否由组策略、管理软件或启动脚本重新写回。不要把 netsh http 当作普通上网代理命令,它管理的是 Windows HTTP Service 的监听、证书和相关服务配置,和 WinHTTP 出站代理不是同一层。

Windows Terminal 代理失败的可复现排查顺序

遇到“终端能打开,但命令无法联网”时,按下面顺序可以减少把不同问题混在一起。

  1. 确认命令实际运行在哪个环境。分别确认当前是 PowerShell、cmd 还是 WSL。PowerShell 中执行 $PSVersionTable;cmd 中执行 echo %HTTP_PROXY%;WSL 中执行 env | grep -i proxy。不同环境不会自动共享所有配置。

  2. 确认变量名称和值。PowerShell 中执行 Get-ChildItem Env:*PROXY*。检查代理地址是否包含正确协议、主机和端口,尤其不要把 SOCKS 地址误写成 HTTP 代理地址。

  3. 先测端口,再测 HTTPS。在 PowerShell 中执行 Test-NetConnection 127.0.0.1 -Port 7890,将地址和端口换成实际代理监听地址。若 TCP 端口不通,先检查代理程序是否启动、监听地址是否正确,以及本机防火墙或安全软件是否拦截。

  4. 区分直连失败和代理失败。先执行没有代理参数的请求,再执行带 -Proxy 的请求。只有代理请求失败时,重点检查代理协议、认证、证书和绕过列表;两者都失败时,继续检查 DNS、默认路由、出口网络和目标站点状态。

  5. 检查 DNS 解析。执行 Resolve-DnsName example.com。如果出现解析失败,先处理 DNS;如果能解析但连接超时,再检查端口、路由、丢包或代理转发。

  6. 检查 WinHTTP 是否被误配置。执行 netsh winhttp show proxy。如果某个系统服务异常而 PowerShell 请求正常,优先比较 WinHTTP 配置与当前终端环境变量,不要反复修改 Windows Terminal 界面设置。

  7. 重新打开进程后复测。修改 profile、系统环境变量或 WinHTTP 后,关闭旧标签页和相关程序,再启动新进程。旧进程通常不会自动读取后来新增的环境变量。

Windows PowerShell 5.1 如果需要明确指定代理,可以使用 -Proxy,并在代理要求认证时按官方参数提供 -ProxyCredential。不要为了绕过证书错误而关闭证书校验;应先核对代理是否使用企业证书、系统时间是否准确,以及目标地址是否被中间设备替换。

常见错误与对应处理方式

错误表现更可能的原因处理顺序
无法连接到代理服务器代理进程未启动、端口错误或监听地址不对先执行 Test-NetConnection 检查 TCP 端口,再核对变量
名称解析失败DNS 配置、代理 DNS 转发或目标域名问题执行 Resolve-DnsName,再分别测试直连和代理请求
407 Proxy Authentication Required代理需要认证,当前请求没有有效凭据确认账号权限,并使用 PowerShell 的 -ProxyCredential 或组织规定的认证方式
证书验证失败代理证书链、系统时间或 HTTPS 检查设备问题检查系统时间、证书链和代理文档,不要直接关闭证书验证
PowerShell 成功但某个程序失败该程序不读取环境变量,或使用 WinHTTP、独立配置或 WSL 网络确认程序的代理实现,再检查 netsh winhttp show proxy 和程序自身配置

结论与最短操作路径

如果只是想让 Windows Terminal 中的 PowerShell 联网,最短路径是:设置当前会话的 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY,使用 Invoke-WebRequest 验证,再根据报错检查端口、DNS 和代理认证。若只希望特定标签页生效,把同样的变量写入对应 profile 的 environment。只有在目标程序明确依赖 WinHTTP 时,才查看或调整 netsh winhttp。

这套方法不会替你判断某个代理服务是否可用,也不会把 Windows Terminal 当成网络转发器;它的作用是先确定配置所在层,再用可重复的命令把连接问题定位到进程、端口、DNS、认证或 WinHTTP。

参考资料

常见问题

Windows Terminal 自带代理功能吗?

Windows Terminal 本身主要负责承载 PowerShell、cmd、WSL 等命令行环境,不是统一的网络代理程序。可以通过 profile 的 environment 对象向其中启动的进程传入代理环境变量,但最终是否生效取决于具体命令或程序是否读取这些变量。

设置 HTTP_PROXY 后,PowerShell 还是无法联网怎么办?

先用 Get-ChildItem Env:*PROXY* 确认变量,再用 Test-NetConnection 检查代理端口。端口可达后,分别测试 Invoke-WebRequest 的直连和 -Proxy 请求;如果出现名称解析失败,继续检查 Resolve-DnsName;如果出现 407,则检查代理认证。

netsh winhttp show proxy 和 HTTP_PROXY 有什么区别?

HTTP_PROXY 是当前进程可以读取的环境变量,常影响 PowerShell 7 及其他支持该变量的程序;netsh winhttp show proxy 查看的是 WinHTTP 配置,主要供使用 WinHTTP 的程序读取。两者属于不同配置层,修改其中一个不会保证另一个同步变化。

为什么 Windows Terminal 里改了代理,WSL 或其他标签页仍然不能用?

环境变量通常按进程和 profile 生效。不同标签页可能启动了不同 shell,WSL 也有自己的 Linux 环境和网络配置。应分别在目标环境中查看代理变量,并确认该工具是否支持 HTTP_PROXY、HTTPS_PROXY 或自身代理参数。

相关阅读

参考资料

  1. Microsoft:Windows Terminal tips and tricks
  2. Microsoft:PowerShell Invoke-WebRequest
  3. Microsoft:Windows PowerShell 5.1 Invoke-WebRequest
  4. Microsoft:netsh winhttp

命令诊断后的下一步

网络命令行决策:保留诊断记录;当结果指向跨境路径时,再评估网络服务。保留诊断结果并访问官网

套餐、价格、线路与规则不在本站转述,请直接核对官网当前页面。
读者交流群(Win · Mac · 安卓 · iOS 客户端排障):t.me/netcli_chat