我们最近开始使用 SQL Server 2012 SP3 并使用 PowerShell 脚本构建 SQL Server 2012。 我们的自动化过程中需要在数据库上运行多个数据库脚本,在发现这个问题之前,我发现
Invoke-Sqlcmd
非常可靠。
当我在最近安装了 SQL Server 的系统上在 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 设置(例如 SQL 的最大内存限制)的 SMO 程序集。
以管理员身份打开 PowerShell 并通过
sqlserver
安装
Install-Module sqlserver
模块
模块安装后,包括
Invoke-sqlcmd
在内的模块命令应该随时可用。
您可以使用
Get-Command -Module sqlserver
检查相同内容。
如果此模块不可用,您可以在安装后
Import-Module sqlserver
。
我有类似的问题,但我需要运行脚本的服务器无法访问互联网。我找到了一个简单的 .exe 程序,可以以类似的方式运行查询。
https://github.com/SqlQuantumLeap/SimpleSqlExec
您只需将此 exe 称为 Invoke-sqlcmd 即可。
.\SimpleSqlExec -cs $ConnectionStringDB -Q $query
希望有帮助。
这不是一个完整的解决方案,而只是一个对我有用的解决方案。
当您从自动化执行查询时,正在执行的用户无权访问 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
从本地用户那里获取此路径