>백엔드 개발 >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. 명령 생성: PowerShell 스크립트 경로를 가리키는 Command 개체를 시작합니다.

    <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으로 문의하세요.