无法将“ Invoke-Sqlcmd”识别为cmdlet的名称

Gau*_*Gau 2 invoke-sqlcmd

我们最近开始使用Sql Server 2012 SP3,并使用powershell脚本构建SQL Server 2012。我们的自动化要求在db上运行多个数据库脚本,并且我发现Invoke-Sqlcmd非常可靠,直到发现此问题为止。当我在最近安装SQL Server的系统上以Powershell调试模式运行带有适当参数集的Invoke-sqlcmd时。我没问题 PowershellCommand:Invoke-Sqlcmd -InputFile $ sStrJBSPExecRolePath -ServerInstance $ sStrSQLName -ErrorAction Stop 但是,当我在重建同一服务器后通过Powershell 自动化脚本执行相同查询时,最终遇到错误 

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

我在网上做了很多建议导入sqlps等的在线研究,因此为了测试,我在脚本中添加了以下内容     

get-pssnapin-注册的导入模块“ sqlps” -DisableNameChecking

即使在脚本中添加了以上内容。我仍然会遇到同样的错误。但是当我手动运行相同的脚本时,它运行得很好。我不明白有什么问题。powershell自动化脚本-该脚本安装.Net Framework 3.5,SQL Server 2012,SQL Server 2012 SP3,然后加载用于更改sql设置(例如SQL的最大内存限制)的smo程序集。

Aka*_*and 6

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

安装模块后,包含的模块命令Invoke-sqlcmd应易于使用。

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

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


小智 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\"
Run Code Online (Sandbox Code Playgroud)

您可以从它正在工作的本地用户那里获取此路径$Env:Path