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 (с тем же пространством выполнения) для каждой команды, которую я хочу вызывать отдельно?