首頁 > 後端開發 > C++ > 如何從 C# 將帶空格的命令列參數傳遞到 PowerShell 腳本?

如何從 C# 將帶空格的命令列參數傳遞到 PowerShell 腳本?

Linda Hamilton
發布: 2025-01-23 23:11:22
原創
344 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板