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