Задать вопрос
@Quttar72
Изучаю asp.net core mvc

Как PowerShell информирует об окончании выполнения команды?

Мы можем запустить Powershell (pwsh.exe) не только напрямую, но и через стандартную командную оболочку Windows и через новое приложение Windows Terminal. Их объединяет, то что они не позволяют ничего писать, пока не будет выполнена записанная ранее команда (если конечно она не запущена в фоновом режиме).

Я пишу программу на c#, которая должна работать с этим самым PowerShell через стандартные потоки ввода/вывода и я хочу добиться такого же поведения - программа должна каким-то образом информироваться о том, когда команда выполнена. Например выполняя Write-Host Hey1; Start-Sleep 10s; Write-Host Hey2 нельзя полагаться (да и понятно, что это не правильный способ) на наличие данных в выходном потоке.

Вроде бы приложение Windows Terminal в настройках профиля для PowerShell не смотря на обилие настроек по дизайну, непосредственно по подключению к нему имеет лишь одну - это путь до исполняемого файла pwsh.exe. Есть ощущение, что существует стандартный способ информирования об окончании выполнении команды, но я ни как не могу его правильно загуглить.

Пробовал гуглить так же и на английском, вышел на информацию об записываемом байте \a, но скорее всего это для информирования пользователя звуковым сигналом. В целом просматривал байты, которые pwsh.exe пишет в выходной поток, и среди управляющих там лишь 13 и 10 (перевод каретки и новая строка), есть еще 27, но он используется равномерно в тексте и судя по его смыслу ни как не связан с информированием об окончании выполнения.

Edit: я придумал, как на много понятнее сформулировать мой вопрос. Представьте вы хотите, чтобы пользователь в вашей программе на WPF или WinForms мог использовать консоль PowerShell, которая будет представлена например в виде textarea в которой будут выходные данные и text box, в который он сможет записывать команды и отправлять их по нажатию рядом стоящей кнопки.

Для этого запускается процесс PowerShell, в котором разрешено перенаправление потоков ввода/вывода. Эта программа на WinForms или WPF позволяет в любой момент нажать кнопку отправки команды, которая запишет команду из textbox во входной поток powershell.

Дело в том, что хочется добиться такого же поведения как в терминале Windows и оригинальной консоли PowerShell - вводить команду в них можно только когда предыдущая будет записана. Только в этом случае будет блокироваться например кнопка отправки команды, пока не будет выполнена предыдущая команда. Вот в этом вопрос, как понять, что предыдущая команда выполнилась?
  • Вопрос задан
  • 425 просмотров
Подписаться 2 Простой 15 комментариев
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman Куратор тега C#
C# the best
Я пишу программу на c#, которая должна работать с этим самым PowerShell через стандартные потоки ввода/вывода


А зачем так сложно то? есть прямая интеграция PS в C#
https://learn.microsoft.com/en-us/powershell/scrip...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы