將間隔命令列參數從 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中文網其他相關文章!