2

我在 C# 中转义字符以运行 Powershell 脚本时遇到问题。为了使问题简短。我做了以下测试。

我可以在 Powershell ISE 中成功运行以下命令。

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

基本上,该脚本将一条记录插入到数据库表中。该表有两列:摘要和描述。summary 的值为“Test Summary”,description 的值为“test”test”。

我试图通过执行以下操作在 C# 中运行相同的 Powershell 命令。

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.dll 中的“System.Management.Automation.ParameterBindingException” 引发的异常:Microsoft.PowerShell.Commands.Utility.dll 中的“System.Management.Automation.ValidationMetadataException” 引发的异常:“System.Management. System.Management.Automation.dll 中的 Automation.ParameterBindingValidationException'

如果描述不包含双引号。如

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

该脚本在 C# 中运行良好。我相信我在这里正确地转义了双引号。有谁知道这里出了什么问题?

请注意,此示例仅用于演示目的。我知道我可以以一种简单的方式将数据插入到 C# 中的表中。我只是想弄清楚我应该如何在 C# 中正确运行 Powershell 脚本。

谢谢你。

PS:我忘了提到我更喜欢使用 ` 来转义双引号,而不是在描述字段中使用单引号。因为描述的值来自文本框。通过这样做,我只能处理文本框中的双引号并保持原样。

4

0 回答 0