我想自动创建数据库。有三个要创建的数据库,我为每个数据库创建都有一个不同的powershell脚本。现在,在这个powershell脚本上,我还有一个图层批处理文件,这个批处理文件将调用powershell脚本。
说@“D:\ Parent \ Sub \ InstallDB1.cmd”;会像另外两个明智地调用@"D:\Parent\Powerscript1.ps1
。
现在我有单个批处理文件说FinalDB.cmd.
批处理文件FinalDB.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.
由于我的应用程序设计,我无法避免上述情况。
如果我通过双击手动运行Final脚本,则数据库创建过程不会发生任何失败。但是当我使用以下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文件。
我已经完成了我的谷歌搜索,似乎没有任何建议的方法正在发挥作用。
解决问题的任何帮助?为什么我使用C#代码时会出现错误。
感谢
答案 0 :(得分:1)
Invoke-SQLCmd
是由管理单元SqlServerCmdletSnapin100
(在SQL Server 2012之前)或模块SQLPS
(SQL Server 2012+)提供的cmdlet。在调用cmdlet之前,需要将一个或另一个加载到PowerShell中(例如,在脚本的开头)。
答案 1 :(得分:0)
这是我找到自己的解决方案:
似乎没有安装与sql server相关的一些组件,所以我按照以下步骤操作。
步骤1:
打开Visual Studio命令提示符:
如果您的计算机上安装了Visual Studio:在任务栏上,单击“开始”,单击“所有程序”,单击“Visual Studio”,然后单击
Visual Studio工具,然后单击“Visual Studio命令提示符”。
步骤2:
在我发现的c:驱动器中搜索dll文件Microsoft.SqlServer.Management.PSProvider.dll C:\ Program Files(x86)\ Microsoft SQL Server \ 100 \ Tools \ PowerShell \ Modules \ SQLPS
或者它可能处于不同的路径
复制以下dll并粘贴到visual studio命令窗口所指向的位置。这样你就可以运行
了 Visual Studio命令窗口中的installUtil命令
Microsoft.SqlServer.Management.PSProvider.dll
Microsoft.SqlServer.Management.PSSnapins.dll
步骤3:
从Visual studio命令提示符
运行以下命令installutil Microsoft.SqlServer.Management.PSProvider.dll
installutil Microsoft.SqlServer.Management.PSSnapins.dll
答案 2 :(得分:0)
在我的情况下,当我有一台新的开发机器时,我遇到了这个错误。突然,一个运行良好的PowerShell脚本开始失败。这是因为SQL Server 2008 R2的PowerShell Extensions没有安装在新机器上。
简单地说,您可以从此处下载并安装它。 http://www.microsoft.com/en-us/download/details.aspx?id=16978#PowerShell