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

C#使用预先创建的对象调用Powershell,c#,powershell,invoke,C#,Powershell,Invoke,我刚开始学习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

我刚开始学习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); 
var myCustomObj=new CustomObj{Message=“Hello world”};
var ps=Powershell.Create();
ps.AddCommand(“导入模块”).AddParameter(“程序集”、“MyCustomAsm”);
ps.AddCommand(“myCustomObj.Run()”).AddParameter(myCustomObj);
foreach(ps.AddCommand(“Out string”).Invoke()中的字符串str)
控制台写入线(str);
当我对传递给PS的对象调用Run()时,结果将是一个打印输出“Hello world”

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

我想我有两个选择:

  • 这两者都是可能的。如果是,请帮助我:)?

  • 我必须根据现有对象生成脚本文件,并执行“AddScript(…)”命令,让ps执行它。

  • 任何让我开始的建议都很好:)

    亲切的问候

    我找到了一个解决方案:

            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.
            }
    
    var objs=new PSDataCollection{obj};
    使用(var ps=PowerShell.Create())
    {
    SetVariable(“objList”,objs);
    ps.AddScript(@“$objList| ForEach{$\.Run()}”);
    ps.AddCommand(“输出字符串”);
    var输出=ps.Invoke();
    var stringBuilder=新的stringBuilder();
    foreach(输出中的var obj)
    {
    stringBuilder.AppendLine(obj.ToString());
    }
    var result=stringBuilder.ToString().Trim();
    //评价结果。
    }