ホームページ >バックエンド開発 >C++ >スペースを含むコマンドライン引数を C# から PowerShell スクリプトに渡す方法

スペースを含むコマンドライン引数を C# から PowerShell スクリプトに渡す方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-23 23:11:22344ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。