【发布时间】: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