首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C# 啟動 PowerShell 腳本:使用 System.Management.Automation 避免 CMD 包裝

     編輯:關於C++

優勢

  • 無需構造 `powershell.exe -File ...` 命令行,避免參數轉義麻煩。
  • 直接在進程內託管 PowerShell 運行空間,性能更好、交互更靈活。
  • 原生支持參數字典傳遞、錯誤流捕獲、結果序列化。

核心代碼

using System.Management.Automation;
using System.Collections.Generic;
using System.Text;

public bool RunScript(string scriptPath, IDictionary parameters,
                      out string output, out string error) {
    output = error = null;
    using (var ps = PowerShell.Create()) {
        ps.AddCommand(scriptPath);
        ps.AddParameters(parameters); // 參數自動綁定

        var results = ps.Invoke();
        var errors = ps.Streams.Error;

        var sb = new StringBuilder();
        if (errors.Count > 0) {
            foreach (var err in errors) sb.Append(err);
            error = sb.ToString();
        } else {
            foreach (var r in results) sb.AppendLine(r?.ToString());
            output = sb.ToString();
        }
        return errors.Count == 0;
    }
}

關鍵點

  1. `AddCommand` 接受腳本完整路徑(`.ps1` 文件)。
  2. `AddParameters` 接受 `IDictionary`(如 `Hashtable` 或 `Dictionary`),鍵對應腳本 `param()` 參數名。
  3. `ps.Streams.Error` 包含非終止錯誤,終止錯誤會拋出異常(可用 `try-catch` 捕獲)。
  4. 需引用 `System.Management.Automation.dll`(NuGet 包 `Microsoft.PowerShell.SDK`)。

調用示例

var args = new Dictionary<string, object> {
    { "Server", "db01" },
    { "BackupPath", @"D:\Backups" }
};
RunScript(@"C:\Scripts\Backup.ps1", args, out var outStr, out var errStr);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved