我有以下PS脚本(使用PowerShell C#对象构建):
List<string> powershellResults = new List<string>();
foreach (string str in PowerShell.Create().AddScript("Get-ADGroupMember \"Domain Users\" -Server \"Server\" | Select-Object -Property \"Name\" | Format-List").AddCommand("Out-String").Invoke<String>())
{
powershellResults.Add(str);
}
但是,我很快发现,它不是循环返回PS列表,而是将PS列表的整个输出粘贴到C#容器中(因此只有一个条目看起来像:
Name : Alf
Name : Jim
Name : Carrol
如何让PS单独返回每个结果?或者我是否必须在PS输出的C#中进行一些字符串操作?
答案 0 :(得分:3)
我认为你在PowerShell脚本部分做得太多了。试试这个:
var list = new List<string>();
using (var ps = PowerShell.Create()) {
ps.AddScript("Get-ADGroupMember 'Domain Users' -Server Server | Select-Object -Property Name");
var results = ps.Invoke();
foreach (var result in results) {
list.Add(result.Name);
}
}
实际上,您甚至可能会丢失管道的Select-Object部分。 PowerShell会将.NET对象返回给您的程序,您可以选择您感兴趣的属性。
BTW当你使用Out-String
时,整个输出被累积到一个字符串中。如果希望Out-String生成字符串数组,请使用-Stream
参数。