将 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
参数。
我有以下 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
参数。