Ansible运行SQL Server部署PowerShell脚本出现XML生成错误如何解决?
问题根因
- Windows环境Ansible权限提升配置错误
Ansible默认的become插件是sudo,仅适用于Linux系统,你未指定Windows专属的become方式,直接配置become_user或全局开启become参数就会触发PowerShell与sudo插件不兼容的报错。 - WinRM远程会话权限受限
手动交互式登录Windows时,管理员账号会获取完整的系统权限令牌;但通过Ansible使用WinRM远程连接时,默认会开启UAC远程令牌过滤,管理员账号的权限会被降权,缺少写入系统目录、修改注册表的权限,导致SQL Server安装过程中生成配置XML文件时权限不足,触发对应报错。 - 安装任务参数冗余
你在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
相关产品推荐
相关产品推荐

