首页 >后端开发 >C++ >如何从 C# 将带空格的命令行参数传递到 PowerShell 脚本?

如何从 C# 将带空格的命令行参数传递到 PowerShell 脚本?

Linda Hamilton
Linda Hamilton原创
2025-01-23 23:11:22346浏览

How to Pass Command-Line Arguments with Spaces to a PowerShell Script from C#?

将间隔命令行参数从 C# 传递到 PowerShell 脚本

本指南解决了从 C# 应用程序执行 PowerShell 脚本的挑战,特别是处理包含空格的命令行参数。

问题:从 C# 调用 PowerShell 脚本时,直接传递带有空格的参数通常会导致错误。

解决方案:关键是在命令执行过程中正确封装参数。 此示例演示了使用 System.Management.Automation 命名空间的强大方法:

  1. 命令创建:启动一个Command对象,指向您的PowerShell脚本的路径。

    <code class="language-csharp">Command myCommand = new Command(scriptfile);</code>
  2. 参数定义: 将每个命令行参数定义为 CommandParameter 对象。 至关重要的是,确保正确处理带有空格的参数。 这通常是通过将它们括在双引号中来完成的。

    <code class="language-csharp">CommandParameter param1 = new CommandParameter("arg1", "value1");
    CommandParameter param2 = new CommandParameter("arg2", "\"value with spaces\""); // Note the double quotes</code>
  3. 参数添加:CommandParameter 对象添加到 Command 对象的 Parameters 集合中。

    <code class="language-csharp">myCommand.Parameters.Add(param1);
    myCommand.Parameters.Add(param2);</code>
  4. 管道执行: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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn