将间隔命令行参数从 C# 传递到 PowerShell 脚本
本指南解决了从 C# 应用程序执行 PowerShell 脚本的挑战,特别是处理包含空格的命令行参数。
问题:从 C# 调用 PowerShell 脚本时,直接传递带有空格的参数通常会导致错误。
解决方案:关键是在命令执行过程中正确封装参数。 此示例演示了使用 System.Management.Automation
命名空间的强大方法:
命令创建:启动一个Command
对象,指向您的PowerShell脚本的路径。
<code class="language-csharp">Command myCommand = new Command(scriptfile);</code>
参数定义: 将每个命令行参数定义为 CommandParameter
对象。 至关重要的是,确保正确处理带有空格的参数。 这通常是通过将它们括在双引号中来完成的。
<code class="language-csharp">CommandParameter param1 = new CommandParameter("arg1", "value1"); CommandParameter param2 = new CommandParameter("arg2", "\"value with spaces\""); // Note the double quotes</code>
参数添加: 将 CommandParameter
对象添加到 Command
对象的 Parameters
集合中。
<code class="language-csharp">myCommand.Parameters.Add(param1); myCommand.Parameters.Add(param2);</code>
管道执行:将Command
集成到PowerShell管道中并执行它。
<code class="language-csharp">RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); runspace.Open(); Pipeline pipeline = runspace.CreatePipeline(); pipeline.Commands.Add(myCommand); Collection<PSObject> results = pipeline.Invoke(); runspace.Close();</code>
完整示例:
这个完整的代码片段演示了如何使用空格参数执行 PowerShell 脚本:
<code class="language-csharp">string scriptfile = @"C:\path\to\your\script.ps1"; // Replace with your script path string arg1 = "value1"; string arg2 = "value with spaces"; RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); runspace.Open(); Pipeline pipeline = runspace.CreatePipeline(); Command myCommand = new Command(scriptfile); myCommand.Parameters.Add(new CommandParameter("arg1", arg1)); myCommand.Parameters.Add(new CommandParameter("arg2", "\"" + arg2 + "\"")); //Escape spaces Collection<PSObject> results = pipeline.Invoke(); runspace.Close(); // Process the results foreach (PSObject result in results) { Console.WriteLine(result.BaseObject); }</code>
请记住将 "C:pathtoyourscript.ps1"
替换为 PowerShell 脚本的实际路径。 即使在处理包含空格的参数时,这种改进的解决方案也能确保可靠的执行。
以上是如何从 C# 将带空格的命令行参数传递到 PowerShell 脚本?的详细内容。更多信息请关注PHP中文网其他相关文章!