首页 > 解决方案 > Ansible invoke-sqlcmd 因 Invoke-Sqlcmd 失败:Windows PowerShell 处于非交互模式。读取和提示\r\n功能不可用

问题描述

我正在尝试使用 ansible 来调用-sqlcmd 在远程 SQL 服务器实例上运行查询。它无法在其中一个实例上执行并返回结果。在所有其他人运行时没有错误。

不知道这是否是 Ansible 或 powershell 或 SQL Server 让 ansible 通过 win-shell 查询的问题。

- hosts: localhost
  gather_facts: false
  tasks:
    - name: kerberos ticket for individual svc account
      include_tasks: dbserveraudit_kerbinit.yml
      vars:
        ansible_user: "{{ hostvars[item]['svc_user'] }}"
      with_items: "{{ groups['current_sqlservers'] }}"

- hosts: management
  gather_facts: false
  tasks:
    - name: Test sql Connection using svc account
      include_tasks: **dbserveraudit_checksqlconnectivity**.yml
      vars:
        ansible_user: "{{ hostvars[item]['svc_user']  }}@{{admin_domain | upper }}"
        sqlserver: "{{ hostvars[item]['svc_user'] | regex_replace('svc','') }}"
      with_items: "{{ groups['current_sqlservers'] }}"

dbserveraudit_checksqlconnectivity.yml

- block:
    - name: Connect and run query on current db server
      win_shell: Invoke-Sqlcmd -Query "SELECT SERVERPROPERTY('ServerName')" -ServerInstance {{ sqlserver }} -Verbose -OutputSqlErrors 1 -AbortOnError -querytimeout 65335 -Debug 
      register: connectsql
      ignore_errors: true

我得到的错误是 -

"Invoke-Sqlcmd : Windows PowerShell 处于非交互模式。读取和提示\r\n功能不可用。\r\n在 line:1 char:65\r\n+ [Console]::InputEncoding = New-Object Text.UTF8Encoding $false; \r\n调用-Sqlcmd -Q ...\r\n+

+ CategoryInfo          : InvalidResult: (US02PRDSQL271B:PSObject) [Invoke \r\n   -Sqlcmd], PSInvalidOperationException\r\n    +
FullyQualifiedErrorId :
ExecutionFailed,Microsoft.SqlServer.Management.P \r\n  
owerShell.GetScriptCommand",


标签: sqlsql-serverpowershellansible

解决方案


详细程度使用交互式输出。将输出通过管道传输到日志文件或 NUL:提示:无限查询超时为:0 ;) 尝试:

$Log: "c:\temp\test.txt"
(Invoke-SqlCmd -query "Select 1" -Verbose -OutputSqlErrors 1 -AbortOnError -querytimeout 0 -Debug) *>> $Log

推荐阅读