【问题标题】:'Invoke-Sqlcmd' is not recognized as the name of a cmdlet'Invoke-Sqlcmd' 未被识别为 cmdlet 的名称
【发布时间】:2016-10-15 22:54:21
【问题描述】:

我们最近开始使用 SQL Server 2012 SP3 并使用 PowerShell 脚本构建 SQL Server 2012。在我们的自动化过程中需要在一个数据库上运行多个数据库脚本,我发现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 设置(例如 SQL 的最大内存限制)的 SMO 程序集。

【问题讨论】:

  • 考虑发布您的脚本。当它失败时,你是否将它作为本地系统运行?
  • 是的,SQL 服务器服务正在本地系统下运行。但是当我在调试模式下手动运行 powershell 时,它运行没有任何问题。确定我可以把脚本的一部分 $sStrSQLName = $env:COMPUTERNAME $sStrSPWIAFilePath = "D:_ISD\Installs\Scripts\SQL_Install\SQL Scripts\sp_WhoIsActive.sql" Invoke-Sqlcmd -InputFile $sStrSPWIAFilePath -ServerInstance $sStrSQLName -ErrorAction停止
  • 您是否将脚本作为自动化流程的一部分运行,并且您会看到失败?您的用户配置文件可能与您看到失败时正在使用的用户配置文件不同。您能否使用 RUNAS 或 PSEXEC 在脚本失败的用户上下文中启动会话。或者,如果它适合您,您可以使用您的凭据运行您的流程。

标签: powershell windows-server invoke-sqlcmd


【解决方案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从本地用户那里获取此路径

【讨论】:

    【解决方案2】:

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

    模块安装完成后,包括Invoke-sqlcmd在内的模块命令应该都可以使用了。

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

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

    【讨论】:

    • 请注意,我必须在 VSCode 的 PowerShell 终端中执行此操作才能解决同样的问题。
    • 我必须在我的脚本中包含“Import-Module sqlserver”
    猜你喜欢
    • 2018-07-15
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2017-03-26
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多