C#使用预先创建的对象调用Powershell
我刚开始学习PS,正在编写一些C#类,我需要在PS中进行测试 请注意,这些类不是cmdlet。 我想这样做: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
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”
但我甚至不确定这是否可能(可能是出于安全原因)
我想我有两个选择:
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();
//评价结果。
}