2016-06-15 205 views
1

我们最近开始使用Sql server 2012 SP3并使用powershell脚本构建SQL Server 2012。我们的自动化需要在db上运行多个数据库脚本,并且我发现Invoke-Sqlcmd非常可靠,直到发现此问题。 当我在最近安装了SQL服务器的系统上以powershell调试模式运行带有适当参数集的Invoke-sqlcmd时。我没有问题。 PowershellCommand:调用-SQLCMD -inputfile $ sStrJBSPExecRolePath -ServerInstance $ sStrSQLName -ErrorAction停止 但是,当我重新构建在同一台服务器我最终得到下面的错误Invoke-Sqlcmd'未被识别为cmdlet的名称

术语“后执行的powershell通过自动化脚本,同样的查询Invoke-Sqlcmd'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。

我做研究网上很多建议导入SQLPS等这样的测试我在下面的脚本添加

得到-pssnapin - 注册 导入模块“SQLPS” -DisableNameChecking

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

+0

考虑发布您的脚本。你是否可以在失败时将其作为本地系统运行? –

+0

是的SQL服务器服务正在本地系统下运行。但是当我在调试模式下手动运行powershell时,它运行时没有任何问题。 sure 我可以把脚本的一部分 $ sStrSQLName = $ env:COMPUTERNAME $ sStrSPWIAFilePath =“D:\ _ ISD \ Installs \ Scripts \ SQL_Install \ SQL Scripts \ sp_WhoIsActive。SQL” 调用-SQLCMD -inputfile $ sStrSPWIAFilePath -ServerInstance $ sStrSQLName -ErrorAction停止 – Gau

+0

你运行该脚本的自动化过程的一部分,那就是当你看到失败?你的用户配置文件可能不相同的用户配置文件是当你看到失败所使用。你能使用RUNAS或PSEXEC您的脚本未能启动在用户的上下文中的会话。或者,可以在运行过程中的使用您的凭据,如果你的作品。 –

回答

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\" 

你可以从你的本地用户的,它是由$Env:Path

希望工作这条路这部作品

相关问题