Invoke-Sqlcmd'无法识别为cmdlet的名称

时间:2016-06-15 02:17:33

标签: invoke-sqlcmd

我们最近开始使用Sql server 2012 SP3并使用powershell脚本构建SQL Server 2012。我们的自动化要求在db上运行多个Database脚本,我发现Invoke-Sqlcmd非常可靠,直到我发现这个问题。 当我在最近安装SQL服务器的系统上的powershell调试模式下使用适当的参数集运行Invoke-sqlcmd时。我没有问题。 PowershellCommand: Invoke-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设置的smo程序集,例如SQL的最大内存限制。

2 个答案:

答案 0 :(得分:6)

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

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

您可以使用Get-Command -ModuleName sqlserver进行检查。

如果此模块不可用,则可以在安装后Import-Module sqlserver

答案 1 :(得分:-1)

这不是一个完整的解决方案,只是一个适合我的工作。 你可以试试这个。

当您从自动化执行查询时,正在执行的用户无法访问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

从本地用户那里获取此路径

希望这有效