Как указывает Матиас в комментарии, Start-Transcript
командлет (за которым следует соответствующий вызов Stop-Transcript
), как правило, является правильным инструментом для создание стенограммы сеанса .
Однако Start-Transcript
не захватывает всего и имеет общие проблемы и ограничения (записано как PowerShell [ Core] 7.0):
Интерактивные подсказки (Read-Host
, [Console]::ReadLine()
) не расшифрованы - вы не увидите ни строки приглашения, ни того, что набрал пользователь.
Четный вывод может ситуативно отсутствовать в транскрипте, как обсуждалось в этой проблеме GitHub .
Сообщения об ошибках могут быть расшифрованы дважды , и использование транскрипции может изменить поведение сценария - см. этот выпуск GitHub .
Последовательности VT (escape-коды ANSI) не захвачены , так любая окраска, отображаемая в консоли, будет потеряна.
Прежний из двух связанных проблем GitHub вызвал следующий ответ от комитета PowerShell , который отражает статус-кво как PowerShell 7.0 (выделение добавлено):
@ PowerShell / powershell-Committee рассмотрел это, мы считаем, что для транскрипции необходимо полное решение (например, команда сценария unix) [;] хотел бы, чтобы сообщество создало новый командлет (опубликованный в PSGallery), который использует ptty или при Windows захват экранного буфера , но запрос выходит за рамки текущей структуры транскрипции.
Кстати, об утилите script
на Unix -подобных платформах: хотя в целом она является превосходной альтернативой Start-Transcript
(хотя и не предназначена для использования с внутри скриптов) модуль PowerShell PSReadLine
, который также используется для запроса пользователей через Read-Host
, не очень хорошо с ним работает.
Что касается возможной работы round: к сожалению, похоже, что вам придется вручную дублировать строки подсказок и вводимые пользователем данные в выводе вашего скрипта, чтобы они были записаны в стенограмме - , если является модификацией скрипта.