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

Ansible调用mssql_script查询SQL Server执行报错排查

问题根因

报错核心原因是模块使用场景不匹配。
community.general.mssql_script 是依赖Python运行环境、pymssql驱动的模块,仅支持在有标准Python环境的节点(Ansible控制节点、Linux目标节点)上执行,不支持直接下发到Windows目标主机运行。
你将任务下发到Windows主机组执行时,Ansible对Windows主机会默认使用PowerShell作为远程执行解释器,直接把模块的Python代码交给PowerShell解析,才会出现你看到的一系列语法报错:Python的函数定义、异常捕获、比较运算符语法全部不符合PowerShell语法规则,和WINRM连通性、SQL账号权限、SQL服务运行状态没有关系。

修复方案

你可以二选一调整配置:

  • 方案1:将SQL查询任务放在Ansible控制节点本地执行,不下发到Windows目标机。修改后的playbook参考如下:
- hosts: localhost
  gather_facts: no
  connection: local
  collections:
    - community.general
  tasks:
    - name: Check DB connection
      community.general.mssql_script:
        login_user: "testadmin"
        login_password: "test@12345"
        login_host: "xxxxxxxx\SQLEXPRESS"
        login_port: "1433"
        db: master
        script: "SELECT 1"

执行前先在Ansible控制节点安装依赖:pip install pymssql

  • 方案2:如果必须在Windows目标侧发起SQL查询,不要使用community.general.mssql_script模块,换成Windows原生适配的模块实现:比如用community.windows.win_powershell调用.NET SQL客户端执行查询,或者用ansible.windows.win_shell调用系统自带的sqlcmd命令行工具执行语句。
额外注意事项
  • SQL Server Express命名实例默认不监听1433固定端口,会使用动态端口分配策略。你配置里login_host带了\SQLEXPRESS实例名,如果后续出现连接超时问题,可以先去掉login_port参数让驱动自动解析实例对应端口,或者提前确认实例实际监听的端口号再填写。
  • 不要尝试给Windows主机强行指定Python解释器运行该模块,Windows侧Python环境的依赖适配、权限坑较多,稳定性远不如本地执行或者使用Windows原生模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:15:53