Как использовать Start-Transcript в PowerShell
При автоматическом выполнении скриптов PowerShell вам потребуется способ записывать любые ошибки или предупреждения, которые могут возникнуть. Один из вариантов - создать собственную функцию логирования, но есть и более простой способ - это командлет Start-Transcript.
Ком cmdlet Start-Transcript записывает всё, что происходит во время сеанса, в файл журнала. Это команды, которые вы вводите в сеансе PowerShell, и весь вывод, который обычно отображается в консоли. Вы можете использовать это во время вашего обычного сеанса PowerShell, но это более полезно для создания файлов журнала.
В этой статье мы рассмотрим, как использовать командлет Start-Transcript.
Использование Start-Transcript в PowerShell
Команда Start-Transcript в PowerShell довольно проста в использовании. Она имеет всего пару параметров, и по умолчанию вам даже не нужно указывать путь к файлу.
- -Path
Место расположения файла транскрипта (журнала)
- -Append
-
Добавить содержимое в существующий файл
- -Force
Перезаписать файлы с флагом только для чтения
- -NoClobber
Предотвратить перезапись существующих файлов
- -IncludeInvocationHeader
Добавьте временную метку к команде в файле журнала
- -UseMinimalHeader
Добавьте короткий заголовок вместо полного заголовка (PS6+)
- -OutputDirectory
Укажите каталог вывода (имя файла будет создано автоматически)
Существует два способа использования команды Start-Transcript в PowerShell. Вы можете начать запись в вашей сессии PowerShell или включить её в свой скрипт.
Без каких-либо параметров, расшифровка будет сохранена в папке документов пользователя. Имя файла будет сгенерировано автоматически и будет состоять из имени устройства, случайных символов, за которыми следует временная метка.
c:\users\name\documents\PowerShell_transcript.DEVICENAME.qp9EOTN2.20220301132612.txtСлучайные символы гарантируют, что имя файла будет уникальным, когда одновременно запускаются две сессии PowerShell.
Чтобы начать запись, мы можем просто использовать командлет Start-Transcript. Затем, после выполнения скриптов, которые мы хотим запустить, мы можем остановить запись с помощью Stop-Transcript.
Транскрипт будет содержать всю информацию, которую вы видите в консоли, включая очень детализированный заголовок с информацией о хосте, который вы использовали:
Путь и каталог вывода
Путь по умолчанию отлично подходит, когда вы используете PowerShell только на своем компьютере. Но чаще всего вы хотите централизовать файлы журналов. Для этого есть два варианта: мы можем использовать параметр -Path или параметр -OutputDirectory.
С указанным путем нам нужно указать полный путь, включая имя файла. Это полезно, когда вы хотите иметь один файл журнала для скрипта и добавлять все транскрипции в один файл.
Append the transcript to a mfastatus-result.log file.
Start-Transcript -Path c:\logfiles\mfastatus-result.log -Append
Or use -NoClobber to prevent overwriting of existing files
Start-Transcript -Path c:\logfiles\mfastatus-result.log -NoClobberВы также можете использовать параметр -path без append, но имейте в виду, что параметр Start-Transcript по умолчанию перезапишет любое существующее содержимое в файле.
Другим вариантом является использование параметра -OutputDirectory. Таким образом, мы можем указать директорию, где хотим сохранить файл журнала, и позволить командлету создать уникальное имя файла.
Start-Transcript -OutputDirectory c:\temp\logfiles
Result:
Transcript started, output file is c:\temp\logfiles\PowerShell_transcript.WIN11-LAB02.uftVAXsv.20220301045218.txtМинимальный заголовок
Каждый транскрипт начинается с полностью детализированного заголовка с информацией о хосте. При использовании этого для регистрации скриптов, которые запускаются автоматически, этой информации немного слишком много. В PowerShell 6 и выше мы можем использовать параметр -UseMinimalHeader для этого.
Это ограничит информацию заголовка только временной меткой, когда началась транскрипция:
Start-Transcript -OutputDirectory c:\temp\logfiles -UseMinimalDeader
Start of transcript with minimalheader
**********************
PowerShell transcript start
Start time: 20220301135543
**********************Включить заголовок вызова
Заголовок вызова включает временную метку перед каждым шагом или командой в транскрипте. Это особенно полезно, когда у вас есть большой сценарий, выполнение которого занимает некоторое время.
Start-Transcript -OutputDirectory c:\temp\logfiles -IncludeInvocationHeader
**********************
Transcript started, output file is c:\temp\logfiles\PowerShell_transcript.WIN11-LAB02.VKwZ2RF5.20220301050111.txt
**********************
Command start time: 20220301050122
**********************
PS C:\> .\Temp\Test-SMTP.ps1Используйте Start-Transcript внутри скрипта PowerShell
Кроме того, что вы можете начать запись вручную из терминала в PowerShell, вы также можете включить командлет в свой скрипт. Просто начните свой скрипт PowerShell с команды Start-Transcript и завершите его командой Stop-Transcript:
Start-Transcript -OutputDirectory c:\temp\Logfiles -UseMinimalHeader
Your script here
Stop-TranscriptЗавершение
Cmdlet Start-Transcript — это отличный инструмент, когда вы отлаживаете новые сценарии, которые выполняются автоматически. Лично я не использую его много, мне больше нравится функция журналирования в сочетании с блоками Try-Catch, например, внутри сценария для лучшей обработки ошибок.
Когда вы хотите использовать транскрипцию, чтобы увидеть историю своих команд, имейте в виду, что вы также можете использовать командлет Get-History в PowerShell. Это отобразит все команды, которые вы ввели во время своей сессии PowerShell.
Если у вас есть вопросы, просто оставьте комментарий ниже.

