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

Ansible运行SQL Server部署PowerShell脚本出现XML生成错误如何解决?

问题根因
  1. Windows环境Ansible权限提升配置错误
    Ansible默认的become插件是sudo,仅适用于Linux系统,你未指定Windows专属的become方式,直接配置become_user或全局开启become参数就会触发PowerShell与sudo插件不兼容的报错。
  2. WinRM远程会话权限受限
    手动交互式登录Windows时,管理员账号会获取完整的系统权限令牌;但通过Ansible使用WinRM远程连接时,默认会开启UAC远程令牌过滤,管理员账号的权限会被降权,缺少写入系统目录、修改注册表的权限,导致SQL Server安装过程中生成配置XML文件时权限不足,触发对应报错。
  3. 安装任务参数冗余
    你在win_shell模块中额外调用powershell.exe,可能会引发执行环境参数传递异常,且未针对单个安装任务配置正确的提权规则。
解决方案
  • 修正提权配置
    不要全局开启become参数,仅在需要管理员权限的SQL安装任务上配置Windows专属的runas提权方式,你可以在inventory主机变量或者任务中添加如下配置:
ansible_become: yes
ansible_become_method: runas
ansible_become_user: Administrator
ansible_become_password: "{{ windows_administrator_password }}"

原playbook中的全局become: no配置保留即可,不需要修改。

  • 调整目标Windows服务器WinRM配置
    登录目标服务器,以管理员身份运行如下命令,关闭UAC远程令牌过滤:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

如果使用基本认证,可同步执行如下命令配置WinRM权限:

winrm set winrm/config/service/auth @{Basic="true"}
winrm set winrm/config/service @{AllowUnencrypted="true"}
  • 优化安装任务写法
    移除冗余的powershell.exe调用,修改安装任务为如下格式:
- name: Run the deployment install script
  ansible.windows.win_shell: .\MSSQL-SilentInstall.ps1 -Install > C:\Temp\sql_install.log 2>&1
  args:
    chdir: C:\SQLMedia\SQLServerSilentInstall
  become: yes
  become_method: runas
  become_user: Administrator
  become_password: "{{ windows_administrator_password }}"

增加输出重定向到日志文件的配置,后续如果还有报错可以直接查看C:\Temp\sql_install.log以及SQL Server默认安装日志路径C:\Program Files\Microsoft SQL Server\*\Setup Bootstrap\Log下的文件,排查具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 14:45:10