10

我们最近开始使用 SQL Server 2012 SP3 并使用 PowerShell 脚本构建 SQL Server 2012。我们的自动化过程需要在一个数据库上运行多个数据库脚本,在Invoke-Sqlcmd我发现这个问题之前,我发现它非常可靠。

当我Invoke-sqlcmd在最近安装了 SQL 服务器的系统上以 PowerShell 的调试模式使用一组适当的参数运行时,我没有问题。

PowershellCommand:调用-Sqlcmd -InputFile $sStrJBSPExecRolePath -ServerInstance $sStrSQLName -ErrorAction Stop

但是,当我在重建同一台服务器后通过 PowerShell 自动化脚本执行相同的查询时,我最终得到以下错误 

术语“Invoke-Sqlcmd”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。

我在网上做了很多研究建议导入 SQLPS 等,所以为了测试我在我的脚本中添加了以下命令

get-pssnapin -Registered
Import-Module “sqlps” -DisableNameChecking**

即使将上述内容添加到脚本中,我仍然会遇到同样的错误。但是当我手动运行相同的脚本时,它运行得非常好。我不明白出了什么问题。

PowerShell 自动化脚本 - 此脚本安装 .Net Framework 3.5、SQL Server 2012、SQL Server 2012 SP3,然后加载我用来更改 SQL 设置(例如 SQL 的最大内存限制)的 SMO 程序集。

4

2 回答 2

37

以管理员身份打开 PowerShell 并sqlserver通过以下方式安装模块Install-Module sqlserver

安装模块后,包括 在内的模块命令Invoke-sqlcmd应该随时可用。

您可以使用Get-Command -ModuleName sqlserver.

如果这个模块不是现成的,你可以Import-Module sqlserver在安装它之后。

于 2018-09-12T07:44:16.603 回答
0

这不是一个完整的解决方案,而只是一个对我有用的解决方法。

当您从自动化执行查询时,正在执行的用户无权访问 sqlcmd。对 sqlcmd.exe 所在的目录执行命令。

就放

CD "C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn".

要获取 sqlcmd 的位置,请在搜索框中搜索 SQLCMD.exe 的位置。

如果找不到,您需要将其安装在丢失的位置,但在您的情况下,我认为它存在,您只需要找到正确的位置即可。

您还需要为执行自动化脚本的用户设置路径变量,否则它只会识别 sqlcmd,但不会执行。

$env:Path   += ";C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\"

你可以从你的本地用户那里得到这个路径$Env:Path

于 2016-12-05T05:23:00.160 回答