【问题标题】:How can I use invoke-sqlcmd without enabling named pipes?如何在不启用命名管道的情况下使用 invoke-sqlcmd?
【发布时间】:2016-11-23 08:29:29
【问题描述】:

我正在使用加载以下 SQL Server 2008 R2 powershell 插件的脚本

Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100

然后我像这样使用invoke-sql:

Invoke-Sqlcmd -Query "select * from table" -ServerInstance xyz -Database abc -username xxxxxx -password yyyyyyy

我正在使用方法在我们的数据库上运行许多升级脚本。我很高兴在我们的开发\测试环境中使用它,但后来我在生产环境中尝试了它,结果发现我们在服务器配置上有所不同。在我们的产品服务器上,出于安全原因(显然是蠕虫攻击)禁用了命名管道,并且我们的 DBA 不想启用。

这是我得到的错误,研究表明这是一个命名管道问题 - 当我也启用它们时开始工作。

INFO ERROR: Invoke-Sqlcmd : 连接成功 与服务器建立,但随后发生错误 登录过程。 (提供者:共享内存提供者,错误:0 - 否 进程在管道的另一端。)

有谁知道是否有某种方法可以切换我的脚本以使其不需要命名管道?或者这是invoke-sqlcmd的内置连接方法,我需要改变策略(如果有任何建议)。

【问题讨论】:

  • 如果你具体弄清楚了,请更新。我也很好奇。
  • invoke-sqlcmd -Query "select foo from bar" -HostName dbserver -Database fakedb 导致 invoke-sqlcmd :建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)但由于某种原因,这有效:invoke-sqlcmd -Query "select foo from bar" -serverinstance dbserver -Database fakedb

标签: sql-server powershell


【解决方案1】:

类似于 Surreal 对使用 LPC(本地共享内存)的响应,对于 TCP/IP 而不是命名管道,您也可以指定 -ServerInstance tcp:foodb

【讨论】:

    【解决方案2】:

    这是一个有根据的猜测。但这里是:

    我认为您必须使用注册表“覆盖默认值”。

    http://support.microsoft.com/kb/229929

    现在,最简单的方法 (IIRC) 是通过您的

    Control Panel / ODBC Data Source / System DSN.
    

    添加一个“Sql Server”。 (不是本地客户端)。

    最重要的按钮是“客户端配置”,您可以在其中选择命名管道或 tcp/ip。
    尝试DSN方法,完成向导后,查看

    下的注册表项
    HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\ConnectTo
    

    …………

    你可以看看这个:

    http://sev17.com/2012/11/05/cloning-sql-servers-to-a-test-environment/

    查找此代码。

    sqlcmd -S myCMServerInstance -d msdb -Q $query -h -1 -W |
    foreach { Set-ItemProperty -Path 'HKLM:SOFTWAREMicrosoftMSSQLServerClientConnectTo' -Name $($_ -replace 'TEST') -Value "DBMSSOCN,$_" }
    
    }
    

    【讨论】:

    • 我的意思是,您可能需要在注册表中为“brvswidb1062”添加一个链接到 dbmssoccn 的条目,以覆盖默认的命名管道。 DSN 练习展示了它是如何工作的……通过 GUI 工具而不是尝试手动添加条目。
    【解决方案3】:

    您可以使用实例名称as for sqlcmd 的前缀更改连接方法。使用 SQL Server 2012 和 Powershell 4,这对我有用:

    Invoke-Sqlcmd -Query $sqlQuery -serverinstance "lpc:localhost" -Database "myDatabase"
    

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      相关资源
      最近更新 更多