Я пытаюсь запустить скрипты powershell, которые выполняют скрипты sql из C#.Вызов powershell из C# для запуска SQL-скрипта
Если я запустить 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);
TestSQL.sql находится в том же каталоге, Test2.ps1. Я пробовал с полным путем, но это не сработало. –
Каков результат, который вы получаете при запуске Test2.ps1 отдельно от powershell? –
Когда я запускаю Test2.ps1 из командной строки powershell, я вижу, что скрипт выполнен правильно, а значения добавляются в таблицу. –