C# PowerShell не захватывает PowerShell.Streams при использовании AddCommand, но делает это при использовании AddScript

Я столкнулся с очень странным поведением при использовании PowerShell на C#. Когда я выполняю

InitialSessionState s = InitialSessionState.CreateDefault2();
var ps = PowerShell.Create(s);


ps.AddCommand("Write-Information")
    .AddArgument("<test>")
    .Invoke();

// Writes 0. But why?
Console.WriteLine(PS.Streams.Information.Count);

потоки (Stream.Information, Stream.Error, ...) не захватываются. Но когда я использую

ps.AddScript("Write-Information '<test>'")
    .Invoke();

// Writes 1 as expected
Console.WriteLine(PS.Streams.Information.Count);

Все работает как положено. Кто-нибудь может объяснить эту разницу? Я упускаю какие-то концепции? Как может быть разница? Как я могу захватить потоки вызова AddCommand?

Спасибо за любой вклад по этому поводу!

1 ответ

Извините за путаницу, это было у меня плохо. Я звонил ps.AddCommand("...").InvokeAsync() несколько раз в одном экземпляре PowerShell, что означало, что была выполнена только первая команда, а вторая команда вообще не выполнялась (и, следовательно, не было данных Stream).

Правильно ли (и лучше всего) создавать новый экземпляр PowerShell (с тем же пространством выполнения) для каждой команды, которую я хочу вызывать отдельно?

Другие вопросы по тегам