Использование C# с System.Management.Automation для запуска команды PowerShell - я пытаюсь понять цель/намерение свойства Pipeline.Output. Этот код:Почему PowerShell Pipeline.Output.ReadToEnd возвращает пустую коллекцию?
class Program
{
static void Main(string[] args)
{
var results = new List<PSObject>();
var stdout = new List<PSObject>();
using (var runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
using (var pipeline = runspace.CreatePipeline())
{
pipeline.Commands.Add(new Command("Get-ChildItem"));
results.AddRange(pipeline.Invoke());
stdout.AddRange(pipeline.Output.ReadToEnd());
}
runspace.Close();
}
Console.WriteLine("results.Count: {0}", results.Count);
Console.WriteLine("stdout.Count: {0}", stdout.Count);
}
}
Печать:
results.Count: 7
stdout.Count: 0
Я ожидаю, как рассчитывает быть 7. Документация редка на Pipeline.Output. Может ли кто-нибудь пролить свет на то, что Pipeline.Output предполагается использовать? Что я недопонимаю?
Спасибо! Поэтому, если вы работаете синхронно, это бесполезно. – Skrymsli
@Skrymsli да, потому что он считывается и возвращается сразу - вставьте разрыв, и вы увидите, что 'pipe.Output.EndOfPipeline == true', как только' Invoke() 'возвращает –