我正在尝试运行从C#执行sql脚本的powershell脚本。
如果我从powershell命令提示符运行powershell脚本它可以工作但是当我尝试从C#运行它时它不起作用
以下是我用于运行powershell脚本的函数
public static void RunPowershell(string fileName, string functionName, Dictionary<string, string> parameters)
{
string fullPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), fileName);
string script = File.ReadAllText(fullPath);
try
{
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
PowerShell instance = PowerShell.Create();
instance.Runspace = runspace;
instance.AddScript(script);
instance.Invoke();
instance.Commands.Clear();
var command = instance.AddCommand(functionName);
if (null != parameters)
{
foreach (var parameter in parameters)
{
command.AddParameter(parameter.Key, parameter.Value);
}
}
var result = instance.Invoke();
}
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
我的powershell脚本是(Test2.ps1):
function RunScript(){
Import-Module "SQLPS" -DisableNameChecking
Invoke-Sqlcmd -inputfile ".\TestSQL.sql" -ServerInstance . -Verbose
}
function ShowMessage(){
[System.Windows.Forms.MessageBox]::Show("Hi from Powershell !")
}
TestSQL.sql看起来像这样:
USE TEST
GO
INSERT INTO Employee VALUES('1', 'abc')
我在尝试时显示消息框:
PowershellHelper.RunPowershell("Test2.ps1", "ShowMessage", null);
但是当我尝试时不会插入表格中:
PowershellHelper.RunPowershell("Test2.ps1", "RunScript", null);
答案 0 :(得分:0)
这是因为你probalby在你当前的目录中没有TestSQL脚本。您必须提供完整路径或切换当前目录。
Invoke-Sqlcmd -inputfile "C:\FolderWhereYouhavetheSQL\TestSQL.sql" -ServerInstance . -Verbose
或
cd "C:\FolderWhereYouhavetheSQL"
Invoke-Sqlcmd -inputfile ".\TestSQL.sql" -ServerInstance . -Verbose