Ansible执行win_ping无法连通Azure Windows 2019虚拟机报错如何解决?
报错根因
这个错误的核心触发原因是WinRM调用PowerShell时无法正常初始化.NET公共语言运行时(CLR),具体诱因通常包含以下几种:
- .NET Framework运行时文件损坏:Windows 2019系统自带的.NET 4.x组件如果存在系统文件缺失、更新不完全、损坏的情况,就会返回
HRESULT 80004005错误,导致CLR启动失败,WinRM管道直接被关闭。 - WinRM配置与Azure云环境默认安全策略冲突:Azure Windows 2019默认开启了UAC远程限制、Windows Defender进程防护规则,如果运行配置脚本时没有适配云环境参数,会导致WinRM没有权限启动CLR进程。
- WinRM超时/配额设置不合理:默认的WinRM执行配额不足,无法承载Ansible的执行请求,会触发服务端500错误主动关闭连接。
解决方案
按照以下步骤依次操作即可解决:
1. 修复服务器端系统组件
远程登录Azure Windows 2019服务器,以管理员身份运行命令提示符依次执行以下命令:
- 扫描修复系统文件:
sfc /scannow,执行完成后重启服务器 - 如果sfc修复无效,执行DISM镜像修复:
DISM /Online /Cleanup-Image /RestoreHealth,执行完成后再次重启
2. 重新配置WinRM服务
以管理员身份运行PowerShell,依次执行以下命令重置WinRM配置:
# 卸载原有PSRemoting配置 Disable-PSRemoting -Force # 删除已有的HTTPS监听器 winrm delete winrm/config/listener?Address=*+Transport=HTTPS # 重新执行Ansible远程配置脚本,添加Azure环境适配参数 .\ConfiguringRemotingForAnsible.ps1 -EnableCredSSP -DisableBasicAuth $false -SkipNetworkProfileCheck # 验证WinRM服务状态 Get-Service WinRM
执行完成后确认WinRM服务处于正在运行状态,且5986端口已在Azure安全组入站规则中放行。
3. 优化Ansible inventory配置
修改你的hosts文件,在[win:vars]段新增超时配置,可替换原有配置为以下内容:
[win] x.x.x.x [win:vars] ansible_password=************* ansible_connection=winrm ansible_winrm_transport=ntlm ansible_shell_type=powershell ansible_user=***** ansible_port=5986 ansible_winrm_server_cert_validation=ignore # 新增超时配置避免连接被主动断开 ansible_winrm_operation_timeout_sec = 60 ansible_winrm_read_timeout_sec = 90
配置修改完成后重新执行ansible -i hosts win -m win_ping测试连通性即可。
内容的提问来源于stack exchange,提问作者Dhivya
相关产品推荐
相关产品推荐

