c#使用预先创建的对象调用Powershell

本文关键字:对象 调用 Powershell 创建 | 更新日期: 2023-09-27 18:13:39

我刚刚开始使用PS,正在编写一些c#类,我需要从PS内部进行测试。

请注意这些类不是cmdlet

我想这样做:

var myCustomObj = new CustomObj { Message = "Hello world" };
var ps = Powershell.Create();
ps.AddCommand("Import-Module").AddParameter("Assembly", "MyCustomAsm");
ps.AddCommand("myCustomObj.Run()").AddParameter(myCustomObj);
foreach(string str in ps.AddCommand("Out-String").Invoke<string>()) 
        Console.WriteLine(str); 

当我对交给PS的对象调用Run()时,结果将是打印输出"Hello world"。

但我甚至不确定这是可能的(可能是出于安全原因)。

我想我有两个选择:

  1. 这是可能的。

  2. 我将不得不根据我现有的对象和做一个"AddScript(…)"生成脚本文件,让ps执行它。

任何能让我开始的指针都会很好:)。

亲切的问候。

c#使用预先创建的对象调用Powershell

我找到了一个解决方案:

        var objs= new PSDataCollection<CustomObj> {obj};
        using (var ps = PowerShell.Create())
        {
            ps.Runspace.SessionStateProxy.SetVariable("objList", objs);
            ps.AddScript(@"$objList| ForEach { $_.Run()}");
            ps.AddCommand("Out-String");
            var output = ps.Invoke();
            var stringBuilder = new StringBuilder();
            foreach (var obj in output)
            {
                stringBuilder.AppendLine(obj.ToString());
            }
            var result = stringBuilder.ToString().Trim();
            //Evaluate result.
        }