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"。
但我甚至不确定这是可能的(可能是出于安全原因)。
我想我有两个选择:
这是可能的。
我将不得不根据我现有的对象和做一个"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.
}