【问题标题】:Powershell Invoke-SqlCmd: Specify portPowershell Invoke-SqlCmd:指定端口
【发布时间】:2015-10-28 02:49:51
【问题描述】:

我想连接到数据库以在该数据库上执行脚本,但是,我只能使用特定端口号访问相关数据库。

在代码方面我有一些类似的东西:

Invoke-SqlCmd -ServerInstance "Servername,53806" -Database "DatabaseName" -InputFile $File.Fullname -Verbose | Out-File -filePath "D:\Test\TestSQLCmd.rpt"

当我运行这个 PS sn-p 时,什么也没有发生。报告中没有写入任何内容。也没有任何东西写入控制台。当我将 sn-p 更改为:

Invoke-SqlCmd -ServerInstance "Servername","53806" -Database "DatabaseName" -InputFile $File.Fullname -Verbose | Out-File -filePath "D:\Test\TestSQLCmd.rpt"

Invoke-SqlCmd -ServerInstance Servername,53806 -Database "DatabaseName" -InputFile $File.Fullname -Verbose | Out-File -filePath "D:\Test\TestSQLCmd.rpt"

我收到错误消息说参数 ServerInstance 的值不能为空。

如果我删除端口,脚本运行时间会更长,从而导致明显的“建立连接时发生网络相关或特定于实例的错误”错误通知。

在ServerInstance参数中使用Invoke-SqlCmd时如何指定端口。

【问题讨论】:

  • 指定 -ServerInstance "ServerName\InstanceName" 并让 SQL 浏览器处理其余部分不是一个选项吗?

标签: sql-server powershell


【解决方案1】:

您的第一个语法是正确的,例如以下对我有用:

Invoke-SqlCmd -ServerInstance "DbServer,29487" -Database "Master" -Verbose -Query "Select @@ServerName"

但请确保您已配置 TCP 连接。如果命名实例正在工作,则可能是您正在通过命名管道连接。

一个简单的测试方法是使用 Telnet:

telnet server port

然后看看它是否连接。如果没有,那么这就是您需要集中注意力的地方。

(如果没有找到 Telnet,可能需要将其作为一项功能安装)。

【讨论】:

    【解决方案2】:

    试试这个:

    Invoke-SqlCmd -ServerInstance `"Servername,53806`" -Database "DatabaseName" -InputFile $File.Fullname -Verbose | Out-File -filePath "D:\Test\TestSQLCmd.rpt"
    

    【讨论】:

    • 您的示例中的引号不平衡,此外这不是答案。正如我在回答中所展示的那样,Maarten 在他的第一个示例中是正确的。您的示例最终将做的最多是要求小程序连接到服务器调用 Servername,54806 而不是在端口 54806 上运行的服务器 Servername。
    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 2012-09-13
    • 2014-04-15
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多