Azure DevOps通过PSSession执行PowerShell报WinRM连接失败错误
Azure DevOps远程PowerShell任务PSSession创建失败故障排查
故障触发场景:使用Azure DevOps「目标机器上的PowerShell」任务,通过PSSession/Invoke-Command远程执行脚本时,连接NewDBServer.XYZ.local:5986报错WinRM无法完成操作。
核心配置遗漏点(按排查优先级排序)
- 目标服务器网卡网络类别配置为公用网络
WinRM默认防火墙规则对公用网络仅开放同子网访问权限,若Azure DevOps执行代理与目标数据库服务器不在同一子网,请求会被防火墙直接拦截。
修复操作:- 登录目标服务器,执行命令查询当前网卡配置:
Get-NetConnectionProfile- 对承载业务通信的网卡,将网络类别修改为域认证网络(域环境)或专用网络(工作组环境),替换命令中
<目标网卡InterfaceIndex值>为实际查询到的网卡索引:
Set-NetConnectionProfile -InterfaceIndex <目标网卡InterfaceIndex值> -NetworkCategory DomainAuthenticated - WinRM HTTPS 5986端口监听器无效/缺失
任务默认通过5986端口(WinRM HTTPS协议)建立连接,若目标机未配置有效HTTPS监听器、绑定的SSL证书过期/域名不匹配,会直接导致连接失败。
修复操作:- 执行命令核查现有监听器配置:
winrm enumerate winrm/config/listener- 若返回结果无Transport为HTTPS、监听端口为5986的条目,提前准备好颁发给
NewDBServer.XYZ.local的有效SSL证书(存入本地计算机个人证书存储),执行命令创建监听器:
$validCert = Get-ChildItem Cert:\LocalMachine\My | Where-Object {$_.Subject -match "NewDBServer.XYZ.local" -and $_.NotAfter -gt (Get-Date)} | Sort-Object NotAfter -Descending | Select-Object -First 1 winrm create winrm/config/Listener?Address=*+Transport=HTTPS "@{Hostname=`"NewDBServer.XYZ.local`";CertificateThumbprint=`"$($validCert.Thumbprint)`"}" - 防火墙未放通WinRM HTTPS入站流量
即使监听器正常运行,若Windows防火墙或网络层安全组未放通源地址为DevOps代理IP、目标端口为5986的入站TCP流量,连接同样会被阻断。
修复操作:- 启用系统内置的WinRM HTTPS入站防火墙规则:
Enable-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS-In)"- 若有最小权限要求,可修改规则仅允许DevOps代理所在网段访问5986端口。
连通性校验:在DevOps代理所在机器执行以下两步验证,全部通过后重新运行管道即可恢复:
- 执行
Test-NetConnection NewDBServer.XYZ.local -Port 5986,确认TcpTestSucceeded返回值为True- 执行
Enter-PSSession -ComputerName NewDBServer.XYZ.local -UseSSL -Credential <任务配置的远程凭据>,确认可以正常进入远程会话
内容的提问来源于stack exchange,提问作者Muhammedh
相关产品推荐
相关产品推荐

