Я изо всех сил пытаюсь найти способ выполнить многострочный и многострочный сценарий PowerShell в C# таким образом, чтобы все результаты были доступны из метода Invoke (). Похоже, что команды, добавленные PowerShell.AddScript, всегда передаются вместе . Но я хотел бы, чтобы они читались, анализировались и выполнялись как множественные операторы, а все результаты отдельных операторов записывались в вывод .
Возможно ли это?
Что я делаю сейчас:
using PowerShell powerShell = PowerShell.Create();
powerShell.AddCommand("Set-ExecutionPolicy").AddArgument("Unrestricted").AddParameter("Scope", "CurrentUser").AddStatement();
powerShell.AddScript(@"multiple powershell statements
on multiple rows, some of them writing to output"); //No intermediate results will be logged or printed as the script is added as a single pipeline
powerShell.AddScript("$?"); //This is to echo the execution status of the last command into results
var results = powerShell.Invoke();
Сбор результатов содержит только один результат, и это эхо последних $? заявление, которое я тогда запрашиваю, чтобы узнать информацию о пройденном / неудачном выполнении. Я также запрашиваю поток ошибок, но это не относится к вопросу.
Проблема заключается в следующем: Я получаю сценарий PowerShell в качестве пользовательского ввода и поэтому не могу его изменить и добавить в качестве операторов. Я думал о добавлении сценария построчно, но он сломает возможные многострочные конвейеры, кодовые блоки и т. Д. c. Поэтому, чтобы достичь желаемого результата, мне нужно было бы проанализировать сам сценарий, который звучит довольно сложно. Существует ли какое-либо элегантное решение для получения всех результатов из Invoke () и, что наиболее важно, добавления сложного сценария из пользовательского ввода без его дробления в один конвейер, передачи результатов одной команды в другую?