【发布时间】:2016-07-28 15:37:57
【问题描述】:
我正在尝试在 SQL Server 群集上使用 invoke-sqlcmd,但它无法执行并产生以下错误:
invoke-sqlcmd : 发生与网络相关或特定于实例的错误 在建立与 SQL Server 的连接时。服务器没有 找到或无法访问。验证实例名称是否正确 并且 SQL Server 配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开 连接到 SQL Server)在 C:\rs-pkgs\SitecoreDeployScripts\SitecoreDatabasesDeploy.ps1:128 字符:1 + 调用-sqlcmd -InputFile $inputFilePath + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
我能够在非集群的开发 SQL Box 上成功执行我的脚本。下面是一个 SQL 调用示例:
$scriptPath = "C:\"
$scriptName = "MyScript.sql"
$inputFilePath = "{0}\{1}" -f $scriptPath,$scriptName
invoke-sqlcmd -InputFile $inputFilePath
所以问题是这是集群问题还是不允许远程连接的安全问题?如何让 SQL 脚本从 PowerShell 执行(如果我在 SSMS 中打开它们并按执行,则正确执行)。
【问题讨论】:
-
我们看不到您是如何连接到 SQL Server 的。 SQLPS 模块使用 PSProvider,由于您没有在
Invoke-SqlCmd中明确提供目标,因此它将使用 CWD。span> -
我使用的脚本的前面部分:Import-Module sqlps 有没有更好的连接方法/正确的目的地是什么?我认为 sqlps 会按原样工作,它在我的开发 SQL 框中会通过已经到位的 Windows 身份验证
-
告诉我们当
invoke-sqlcmd被执行时$pwd的值是多少。如果您没有指定 if(并且在您的示例中您没有指定),这就是用作与 SQL Server 的连接。否则,您如何期望该代码块知道您的 SQL 服务器在哪里? -
所以 sqlps 不允许通过登录用户的凭据?这在另一个盒子上执行得很好,所以我认为 sqlps 会通过凭据。如果不是,那么在 PowerShell 中建立连接的正确方法是什么……为什么它可以在另一台机器上工作?
-
我的意思是,如果未指定连接信息,您使用的 cmdlet 将使用当前工作目录 (CWD) 来确定要连接到哪个 SQL 服务器。您遇到了连接问题。但是您的代码没有显示您尝试连接的位置。我们看不到您的 CWD 的价值。因此,向我们展示值,或者确定值是什么,看看它是否正确。
标签: sql-server powershell