C# から PowerShell スクリプトに間隔をあけたコマンドライン引数を渡す
このガイドでは、C# アプリケーションから PowerShell スクリプトを実行する際の課題、特にスペースを含むコマンドライン引数の処理について説明します。
問題: C# から PowerShell スクリプトを呼び出すときに、スペースを含む引数を直接渡すとエラーが発生することがよくあります。
解決策: 重要なのは、コマンド実行プロセス内で引数を正しくカプセル化することです。 この例では、System.Management.Automation
名前空間を使用した堅牢な方法を示します:
コマンドの作成: PowerShell スクリプトのパスを指す Command
オブジェクトを開始します。
<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 中国語 Web サイトの他の関連記事を参照してください。