修复 WinRM 错误:HTTP重定向状态代码不支持
错误的描述
这个错误发生在Windows远程管理 (WinRM) 客户端尝试连接到远程服务器或终端时,但目标服务器将流量重定向 (通常通过HTTP 301,302或307状态码) 到不同的URL或HTTPS端口.默认情况下,WinRM协议将HTTP重定向视为安全风险,并明确禁止它们.由于WinRM拒绝遵循重定向链接,连接立即失败.当管理员在服务器上配置全球IIS重定向,使用自动将HTTP流量强制到HTTPS的负载平衡器,或在自动化脚本中输入错误地址块时,这种问题经常发生.
逐步修复问题
方法1:通过直接连接到HTTPS终端点绕过重定向
最安全的解决方法是完全避免重定向,直接针对最终的HTTPS URL.
- 打开你的PowerShell控制台或管理脚本.
- 找到导致错误的命令 (通常是
Enter-PSSession,New-PSSession或是Invoke-Command) 没有. - 将连接协议参数从HTTP更改为HTTPS,并明确添加正确的HTTPS端口 (默认为5986).
- Example of a bad command causing a redirect:
New-PSSession -ComputerName "Server01" - Example of the corrected command:
New-PSSession -ComputerName "Server01" -UseSSL
- Example of a bad command causing a redirect:
- 如果您使用一个特定的连接URI,请确保它明确以
https://并包含正确的域名以匹配服务器的SSL证书.
方法2:修改目标服务器上的IIS重定向规则
如果您控制远程服务器,则互联网信息服务 (IIS) 的全球 HTTP 重定向规则可能会破坏 WinRM.您必须将 WinRM 虚拟目录排除在重定向规则之外.
- 登录导致错误的远程Windows服务器.
- 按下 Start Menu, 类型 IIS Manager 然后打开它.
- 在左边. Connections 扩展服务器节点,点击 Sites,然后选择您的重定向规则的网站 (通常是 Default Web Site ) 没有.
- 在中间窗口中,双击 HTTP Redirect.
- 看看你的重定向配置.如果它将所有请求重定向到HTTPS网站,你需要为WinRM路径添加一个例外.
- To do this using web.config configuration rather than the GUI, open the website root folder (usually
C:\inetpub\wwwroot) 并打开web.config文件. - 添加一个
<location>路径规则禁用重定向PowerShell或是wsman路径:<location path="PowerShell"> <system.webServer> <httpRedirect enabled="false" /> </system.webServer> </location> - 保存文件并通过运行重新启动IIS
iisreset在一个管理命令提示符中.
方法3:在PowerShell会话中启用"允许重定向"标志
如果您必须允许重定向,因为您的网络基础设施或负载平衡器设置,您可以明确指示您的WinRM客户端会话选项允许重定向.
- 打开你的PowerShell脚本或控制台.
- 定义一个新的WinRM会话选项对象并设置
AllowRedirection它们的属性是真实的.$SessionOptions = New-PSSessionOption -AllowRedirection - 将此选项对象传输到您的连接命令中.
-SessionOption参数New-PSSession -ComputerName "Server01" -SessionOption $SessionOptions - 注意: WinRM 只会遵循重定向, 如果您在此选项旁边使用明确的连接URI格式或明确的凭证.
方法4:更新SPN和Kerberos设置
如果重定向错误是 Kerberos 身份验证失败的误导性症状,通过通用 DNS 别名路由,设置服务主名称 (SPN) 可以解决它.
- 在您的Active Directory域控制器或管理机器上作为管理员打开命令提示符.
- 检查您的目标服务器的现有SPN通过运行:
setspn -L Server01 - 如果服务器使用DNS别名或自定义主机名,请手动注册WSMan SPN以正确地将其绑定到计算机帐户:
setspn -S WSMAN/Server01 Server01setspn -S WSMAN/://yourdomain.com Server01 - 在远程机器上重新启动 WinRM 服务.
Restart-Service WinRM在PowerShell中.
可能有一些错误.. Learn Microsoft