Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL群集上调用SQLCMD失败_Sql Server_Powershell - Fatal编程技术网

Sql server 在SQL群集上调用SQLCMD失败

Sql server 在SQL群集上调用SQLCMD失败,sql-server,powershell,Sql Server,Powershell,我试图在SQL Server群集上使用invoke sqlcmd,但它无法执行并产生以下错误: 调用sqlcmd:发生与网络相关或特定于实例的错误 在建立与SQL Server的连接时。服务器不可用 找到或无法访问。验证实例名称是否正确 SQL Server配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40-无法打开 与SQL Server的连接)位于 C:\rs pkgs\SiteCoreDeployScript\SitecoreDatabasesDeploy.ps1:128 字符

我试图在SQL Server群集上使用invoke sqlcmd,但它无法执行并产生以下错误:

调用sqlcmd:发生与网络相关或特定于实例的错误 在建立与SQL Server的连接时。服务器不可用 找到或无法访问。验证实例名称是否正确 SQL Server配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40-无法打开 与SQL Server的连接)位于 C:\rs pkgs\SiteCoreDeployScript\SitecoreDatabasesDeploy.ps1:128 字符:1 +调用sqlcmd-InputFile$inputFilePath + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:InvalidOperation:(:)[Invoke Sqlcmd],SqlException +FullyQualifiedErrorId:SQLExecutionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

我能够在未群集的开发SQL框上成功执行脚本。下面是SQL调用的一个示例:

$scriptPath = "C:\"
$scriptName = "MyScript.sql"
$inputFilePath = "{0}\{1}" -f $scriptPath,$scriptName
invoke-sqlcmd -InputFile $inputFilePath 

所以问题是这是群集问题还是不允许远程连接的安全问题?如何从PowerShell获取要执行的SQL脚本(如果我在SSMS中打开它们并按execute,则会正确执行)。

最后,脚本只需要-ServerInstance的服务器实例名称开关,如下所示:

$scriptPath = "C:\"
$scriptName = "MyScript.sql"
$inputFilePath = "{0}\{1}" -f $scriptPath,$scriptName
invoke-sqlcmd -InputFile $inputFilePath -ServerInstance 'MyClusterName"
我通过运行以下查询找到了该名称:

select @@servername

它在没有-ServerInstance开关的单个框上工作,因为它在中是本地化的/single

,然后脚本只需要-ServerInstance的服务器实例名称开关,如下所示:

$scriptPath = "C:\"
$scriptName = "MyScript.sql"
$inputFilePath = "{0}\{1}" -f $scriptPath,$scriptName
invoke-sqlcmd -InputFile $inputFilePath -ServerInstance 'MyClusterName"
我通过运行以下查询找到了该名称:

select @@servername

它在没有-ServerInstance开关的单个框上工作,因为它是本地化的/single

我们看不到您是如何连接到SQL server的。SQLPS模块使用PSProvider,由于您没有在
Invoke SqlCmd
中显式提供目标,它将使用CWD。在我使用的脚本前面:Import module SQLPS是否有更好的连接方法/正确的目标是什么?我认为sqlps将按原样工作,它在我的dev SQL框中是这样的,通过已经存在的windows身份验证告诉我们执行
invoke sqlcmd
$pwd
的值是多少。如果您没有指定if(并且在示例中没有指定),这就是用作到SQL server的连接的内容。否则,您如何期望该代码块知道您的SQL server在哪里?因此sqlps不允许通过登录用户的凭据?这在另一个框上执行得很好,所以我认为sqlps可以传递凭证。如果不是,在PowerShell中建立连接的正确方法是什么。。。为什么它在另一台机器上工作?我是说,如果未指定连接信息,您正在使用的cmdlet将使用当前工作目录(CWD)来确定要连接到哪个SQL server。你的连接有问题。但是您的代码没有显示您尝试连接的位置。我们看不到您的CWD的价值。因此,请向我们显示该值,或确定该值是什么,然后查看它是否正确。我们无法查看您是如何连接到SQL server的。SQLPS模块使用PSProvider,由于您没有在
Invoke SqlCmd
中显式提供目标,它将使用CWD。在我使用的脚本前面:Import module SQLPS是否有更好的连接方法/正确的目标是什么?我认为sqlps将按原样工作,它在我的dev SQL框中是这样的,通过已经存在的windows身份验证告诉我们执行
invoke sqlcmd
$pwd
的值是多少。如果您没有指定if(并且在示例中没有指定),这就是用作到SQL server的连接的内容。否则,您如何期望该代码块知道您的SQL server在哪里?因此sqlps不允许通过登录用户的凭据?这在另一个框上执行得很好,所以我认为sqlps可以传递凭证。如果不是,在PowerShell中建立连接的正确方法是什么。。。为什么它在另一台机器上工作?我是说,如果未指定连接信息,您正在使用的cmdlet将使用当前工作目录(CWD)来确定要连接到哪个SQL server。你的连接有问题。但是您的代码没有显示您尝试连接的位置。我们看不到您的CWD的价值。因此,请向我们显示该值,或者确定该值是什么,然后看看它是否正确。