将 Powershell 结果放入 C# 列表

Get Powershell result into C# List

我有以下 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);


    }

但是,我很快发现它不是循环遍历 returned PS 列表,而是将 PS 列表的整个输出粘贴到 C# 容器中(所以有只有 1 个条目看起来像:

Name : Alf
Name : Jim
Name : Carrol

如何分别获得 PS 到 return 的每个结果?或者我是否必须在 C# 中对 PS 输出进行一些字符串操作?

我认为您在 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 将 return .NET 对象添加到您的程序中,您可以 select 您感兴趣的属性。

顺便说一句,当您使用 Out-String 时,整个输出会累积到一个字符串中。如果您希望 Out-String 生成字符串数组,请使用 -Stream 参数。