“Invoke-Sqlcmd”未被识别为 cmdlet 的名称

问题描述 投票:0回答:3

我们最近开始使用 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 windows-server invoke-sqlcmd
3个回答
77
投票

以管理员身份打开 PowerShell 并通过

sqlserver
 安装 
Install-Module sqlserver

模块

模块安装后,包括

Invoke-sqlcmd
在内的模块命令应该随时可用。

您可以使用

Get-Command -Module sqlserver
检查相同内容。

如果此模块不可用,您可以在安装后

Import-Module sqlserver


0
投票

我有类似的问题,但我需要运行脚本的服务器无法访问互联网。我找到了一个简单的 .exe 程序,可以以类似的方式运行查询。

https://github.com/SqlQuantumLeap/SimpleSqlExec

您只需将此 exe 称为 Invoke-sqlcmd 即可。

.\SimpleSqlExec -cs $ConnectionStringDB -Q $query

希望有帮助。


-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

从本地用户那里获取此路径
© www.soinside.com 2019 - 2024. All rights reserved.