Проблема с экранированием символов при запуске скрипта Powershell в C# - PullRequest
2 голосов
/ 04 марта 2020

У меня проблемы с экранированием символов в C# для запуска скриптов Powershell. Чтобы сделать проблему короткой. Я сделал следующий тест.

Я могу успешно выполнить следующую команду в Powershell ISE.

New-Issue -Summary "Test Summary" -Description "test `"test`" "

По сути, скрипт вставляет запись в таблицу базы данных. Таблица состоит из двух столбцов: сводка и описание. Значение для сводки - «Сводка теста», а значение для описания - «тест», тест ».

Я пытался запустить ту же команду Powershell в C#, выполнив следующее.

try{
    command = "New-Issue -Summary \"Test Summary \" -Description \"test `\"test`\" \"";
    powerShellInstance = PowerShell.Create();
    powerShellInstance.AddScript(command);
    Collection<PSObject> PSOutput = powerShellInstance.Invoke();
    ...
}
catch(Exception e)
{
    return e.Message;
}

Я получил ошибку в C#. Ошибка не может быть перехвачена оператором try catch. Но я вижу исключения, сохраняемые в выходных данных в VisualStudio, код будет зависать там всегда:

Исключение: «System.Management.Automation.ParameterBindingException» в System.Management.Automation.dll Исключение: System.Management.Automation.ValidationMetadataException 'в Microsoft.PowerShell.Commands.Utility.dll Возникло исключение:' System.Management.Automation.ParameterBindingValidationException 'в System.Management.Automation.dll

Если описание не содержит двойные кавычки. Например,

 command = "New-Issue -Summary \"Test Summary \" -Description \"test \"";

Скрипт отлично работает в C#. Я полагаю, что правильно избегаю двойных кавычек. Кто-нибудь знает, что здесь происходит не так?

Обратите внимание, этот пример только для демонстрации цели. Я знаю, что могу легко вставить данные в таблицу в C#. Я просто хочу выяснить, как правильно запускать скрипты Powershell в C#.

Спасибо.

PS: Я забыл упомянуть, что я предпочитаю использовать `чтобы избежать двойных кавычек, а не использовать одинарные кавычки в полях описания. Потому что значение для описания получается из текстового поля. Таким образом я могу обрабатывать только двойные кавычки из текстового поля и оставлять все как есть.

...