将Powershell结果输入C#List

时间:2015-01-13 17:00:47

标签: c# powershell

我有以下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#中进行一些字符串操作?

1 个答案:

答案 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参数。