我想自动化我的数据库创build。 有三个数据库创build,我有一个不同的PowerShell脚本为每个数据库创build。 现在在这个PowerShell脚本我有一个更多的图层batch file这个batch file将调用PowerShell脚本。 说@“D:\ Parent \ Sub \ InstallDB1.cmd”; 会调用@"D:\Parent\Powerscript1.ps1
如明智的另外两个。现在我有单个batch file说FinalDB.cmd.
batch fileFinalDB.cmd.
将一个接一个地调用三个命令脚本将内部调用PowerShell脚本。
So now the calls in `FinalDB.cmd` call InstallDB1.cmd //comment: which internally calls Powerscript1.ps1. call InstallDB2.cmd //comment: which internally calls Powerscript2.ps1. call InstallDB3.cmd //comment: which internally calls Powerscript3.ps1.
由于我的应用程序devise,我不能避免上述情况。
如果我通过双击手动运行最终脚本,数据库创build过程没有任何失败发生。但是,当我使用下面的C#代码来调用FinalDB.cmd
。
public static RunCommand RunCommandInDir(string workingDirectory, string arguments, string executablePath) { RunCommand runResults = new RunCommand { Output = new StringBuilder(), Error = new StringBuilder(), RunException = null }; try { using (Process proc = new Process()) { proc.StartInfo.FileName = executablePath; proc.StartInfo.Arguments = arguments; proc.StartInfo.WorkingDirectory = workingDirectory; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.CreateNoWindow = false; proc.OutputDataReceived += (o, e) => runResults.Output.Append(e.Data).Append(Environment.NewLine); proc.ErrorDataReceived += (o, e) => runResults.Error.Append(e.Data).Append(Environment.NewLine); proc.Start(); proc.BeginOutputReadLine(); proc.BeginErrorReadLine(); proc.WaitForExit(); runResults.ExitCode = proc.ExitCode; } } catch (Exception e) { runResults.RunException = e; } return runResults; }
当我使用上面的代码调用时,我收到错误“Invoke-Sqlcmd”不被识别为cmdlet,函数,脚本文件或可操作程序的名称“,当我手动运行我的FinalDB.cmd文件。
我做了我的谷歌search似乎没有任何build议的方法正在工作。
任何帮助解决这个问题?为什么当我使用C#代码时,错误即将到来。
谢谢
Invoke-SQLCmd
是由管理单元SqlserverCmdletSnapin100
(在SQL server 2012之前)或模块SQLPS
(SQL server 2012+)提供的cmdlet。 您需要一个或另一个加载到PowerShell(例如,在脚本的开始),然后才能调用该cmdlet。
这是我找到自我的解决方案:
看来有些与sql server相关的组件没有安装,所以我按照下面的步骤。
步骤1:
打开Visual Studio命令提示符:
如果您的计算机上安装了Visual Studio:在任务栏上单击开始,单击所有程序,单击Visual Studio,单击
Visual Studio工具,然后单击Visual Studio命令提示符。
第2步:
在C:\ Program Files(x86)\ Microsoft SQL server \ 100 \ Tools \ PowerShell \ modulees \ SQLPS下找到的c:盘中搜索dll文件Microsoft.Sqlserver.Management.PSProvider.dll
或者它可能在不同的路径下
复制下面的dll并粘贴到你的visual studio命令窗口指向的位置下。 这样你就可以运行了
您的visual studio命令窗口中的installUtil命令
Microsoft.Sqlserver.Management.PSProvider.dll
Microsoft.Sqlserver.Management.PSSnapins.dll
第三步:
从Visual Studio命令提示符下运行以下命令
installutil Microsoft.Sqlserver.Management.PSProvider.dll
installutil Microsoft.Sqlserver.Management.PSSnapins.dll
在我的情况下,当我有一个新的开发机器时,我有这个错误。 突然间,运行良好的PowerShell脚本开始失败。 这是因为SQL server 2008 R2的PowerShell扩展没有安装在新机器上。
简单地说,你可以从这里下载并安装它。 http://www.microsoft.com/en-us/download/details.aspx?id=16978#PowerShell